【问题标题】:Set comboBox to custom display format将组合框设置为自定义显示格式
【发布时间】:2016-11-06 15:24:27
【问题描述】:

我有一个 WinForms 组合框,其中包含“区域”列表(我设置的自定义类)。每个Region 都有NameAbbreviation 等属性。我知道我可以将组合框设置为comboBox.DisplayMember = "Name";,但我希望显示格式为"(" + Abbreviation + ") " + Name(例如(OR) Oregon)。

我知道我可以为此创建一个单独的属性(例如DisplayName)并设置comboBox.DisplayMember = "DisplayName";,但还有其他方法吗? comboBox.DisplayMember = "(" + Abbreviation + ") " + Name; 之类的?

【问题讨论】:

  • 据我所知,没有更好的办法。覆盖 ToString 是类似的,但您也必须在类中编写代码,因此使用自定义属性是有意义的

标签: c# winforms combobox properties


【解决方案1】:

您可以使用组合框的 Format 事件。

 private void comboBox1_Format(object sender, ListControlConvertEventArgs e)
    {
        string Name = ((yourClass)e.ListItem).Property1;
        string LastName = ((yourClass)e.ListItem).Property2;
        e.Value = Name + " " + LastName;
    }

【讨论】:

  • 谢谢!那行得通!仅供参考,首选方法是创建一个“DisplayName”属性,为该属性在get 中执行所有“格式化逻辑”,然后使用comboBox.DisplayMember = "DisplayName";,对吗?
  • @derekantrican 是的,首选的方式是这样。
  • @derekantrican:我用我想显示为“MMM yyyy”的日期时间值填充了一个组合框。使用DisplayName 或覆盖ToString() 的唯一方法是创建一个特殊的显示对象。因此这种Format 事件方法非常方便。
【解决方案2】:

这已经很老了,但我很难找到为什么没有触发 Format 事件。

您还需要将ComboBox.FormattingEnabled 设置为true 才能调用和使用事件。

【讨论】:

    【解决方案3】:

    另一种方法是修改类的“ToString()”方法。

    如果你这样做,你将改变类在任何地方的 isualized 方式(组合框、列表框等)

    public override string ToString()
    {
       return "(" + Abbreviation + ") " + Name;
    }
    

    如果您想为不同的地方提供不同的可视化效果,这是没有用的,但如果您希望它始终相同,那就完美了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 2011-02-09
      相关资源
      最近更新 更多