VB.Net ComboBox - 基于另一个ComboBox中的选择的枚举和限制值

时间:2011-09-21 20:33:47

标签: vb.net combobox enums

我正在研究的项目广泛使用Enum来保存单位符号。像这样......

Public Enum AreaSym
    unknown = 0
    in2
    mm2
End Enum

我的问题开始于我意识到我的Enum名称没有为我的ComboBox上的下拉菜做好名字。我从这个C#CodeProject http://www.codeproject.com/KB/cs/LocalizingEnums.aspx?msg=3746572找到并实现了一个TypeConverter ...它允许你在.Resx文件中分配Enum Values友好名称,并重载GetValues函数,以便它返回Enums友好名称。 .Resx文件。这很好用,然后我可以将组合框数据源直接分配给枚举。

ComboBox1.DataSource = System.Enum.GetValues(GetType(AreaSym))

然而,我意识到当以这种方式使用数据源时,我必须操纵数据源以在ComboBox中创建更改。比如,如果我不想向用户显示未知,我需要另一种方法来加载我的ComboBoxes。这是我决定制作List(Of KeyValuePair(AreaSym,String))

的时候
Public Function AreaSymbols() As List(Of KeyValuePair(Of AreaSym, String))
    AreaSymbols = New List(Of KeyValuePair(Of AreaSym, String))
    AreaSymbols.Add(New KeyValuePair(Of AreaSym, String)(AreaSym.in2, "in²"))
    AreaSymbols.Add(New KeyValuePair(Of AreaSym, String)(AreaSym.mm2, "mm²"))
    Return AreaSymbols
End Function

这很棒,因为现在我可以使用列表准确控制组合框中的内容。

ComboBox1.DataSource = UnitNameList.AreaSymbols
ComboBox1.DisplayMember = "Value"
ComboBox1.ValueMember = "Key"

但是,我发现使用DataSource阻止我做两件事。

  1. 当表单加载时,我希望ComboBox本身显示为空,没有文本,或者在Text属性中显示我输入的文本。目前使用DataSource,它总是填充列表中的第一项。

  2. 我希望能够根据另一个列表中的项目选择轻松限制列表中的项目。经典的例子是两个组合框填充完全相同的值(1,2,3)& (1,2,3)。当你在ComboBox 1中选择1时,只有(2,3)可以在ComboBox 2中选择。

  3. 我意识到如果我使用Items而不是数据源,我可能很容易做到这一点,我只是不确定最好的方法是什么,因为我需要拥有密钥,值对枚举和字符串......

0 个答案:

没有答案
相关问题