【问题标题】:How to create an "inline" object to contain members for a ComboBox?如何创建一个“内联”对象来包含 ComboBox 的成员?
【发布时间】:2011-10-04 15:07:26
【问题描述】:

我有一个枚举形式:

Public Enum MyCollections As Integer
    My_Stuff = 0
    My_Things = 1
End Enum

我想将它们用作 ComboBox 中的值,但我想分别显示字符串“My Stuff”和“My Things”。

我确信我已经看到了一种快速创建某种本地对象定义的方法,我可以在其中分配要显示的字符串属性,以及用于存储枚举元素值的“MyCollections”类型属性,但是我一辈子都想不出如何向搜索引擎解释这一点。

谁能将我模糊的记忆翻译成一些代码,我可以用来为我的 ComboBox 设置数据源并在用户更改选择时检索数据?

【问题讨论】:

    标签: .net vb.net winforms combobox


    【解决方案1】:

    我喜欢创建一个简单的对象并用我的简单对象的集合填充 ComboBox。然后我将 ComboBox 的 DisplayMember 属性设置为我想从我的简单对象中显示的属性的名称。

    'Something like this
    Class SimpleObject
        Property Name As String
    End Class
    
    'And then later...
    comboBox.DisplayMember = "Name"
    

    【讨论】:

    • 是的,我同意这一点,但是对于我的问题的具体主题,我现在心里有些痒,我希望有人能过来解决它。我最终可能会选择按照你建议的方式做事,我只是想在我的记忆书中填补空白页,如果你明白我的意思......我真的认为我昨晚应该多睡点......
    • 好的,很酷。抱歉,我不记得你做了什么;)我发现自己也在尝试确定旧的解决方案,它们很难记住!
    【解决方案2】:

    我想这就是你想要的——它枚举枚举,列出值和值的文本字符串(去掉下划线):

        Dim enumValue As Integer, enumName As String
        For Each enumValue In System.Enum.GetValues(GetType(MyCollections))
            enumName = System.Enum.GetName(GetType(MyCollections), enumValue).Replace("_", " ")
            Debug.WriteLine(enumValue.ToString + ";" + enumName)
        Next
    

    输出:

    0;My Stuff
    1;My Things
    

    将此数据放入组合框将需要一个数据绑定,在您的情况下为probably require a custom class,但上面的代码可能会让您开始。

    【讨论】:

      【解决方案3】:

      是的,看起来我在考虑“匿名类型”。这里有一些代码可以回答我试图提出的(不同的,非常模糊的)问题:

      Private Sub TestCodeForm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
          Dim addOutcomes As New Collection
          For Each enumIn As MyCollections In [Enum].GetValues(GetType(MyCollections))
              addOutcomes.Add(New With {.Display = [Enum].GetName(GetType(MyCollections), enumIn), .Value = enumIn})
          Next
      
          Me.ComboBox1.DisplayMember = "Display"
          Me.ComboBox1.ValueMember = "Value"
          Me.ComboBox1.DataSource = addOutcomes
      End Sub
      
      Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
          MsgBox("Display: " & CType(sender, ComboBox).SelectedItem.Display & vbCrLf &
                 "Value: " & CType(sender, ComboBox).SelectedItem.value.GetType.ToString)
      End Sub
      

      【讨论】:

        猜你喜欢
        • 2018-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多