Проект, над которым я работаю, широко использует Enum для хранения символов юнитов.Вот так ...
Public Enum AreaSym
unknown = 0
in2
mm2
End Enum
Мои проблемы начались, когда я понял, что мои имена в Enum не дают хороших имен для выпадающих списков на моих списках.Я нашел и реализовал TypeConverter из этого C # CodeProject http://www.codeproject.com/KB/cs/LocalizingEnums.aspx?msg=3746572 ... Он позволяет назначать дружественные имена Enum Values в файле .Resx и перегружает функцию GetValues, так что он возвращает дружественные имена Enums изфайл .Resx.Это работает хорошо, так как я могу назначить источник данных в выпадающем списке прямо в enum.
ComboBox1.DataSource = System.Enum.GetValues(GetType(AreaSym))
Однако я понял, что при использовании источника данных таким образом, мне приходится манипулировать источником данных, чтобы создать изменение в ComboBox.Например, если я не хочу отображать неизвестное пользователю, мне понадобится другой способ загрузки моих комбинированных списков.Именно тогда я решил создать список (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"
Однако я обнаружил, что использование источника данных не позволяет мне делать две вещи.
Когда форма загружается, я хочу, чтобы сам ComboBoxпоказывать либо пустой, без текста, либо показывать текст, который я ввел в свойстве Text.В настоящее время, используя DataSource, он всегда заполняется первым элементом в списке.
Я хотел бы иметь возможность легко ограничивать элементы в списке на основе выбора элементов в другом списке.Классическим примером могут быть два поля со списком, заполненные одинаковыми значениями (1,2,3) и (1,2,3).Когда вы выбираете 1 в ComboBox, для выбора в ComboBox 2 доступны только (2,3).
Я понимаю, что, вероятно, я мог бы легко это сделать, если бы использовал Предметы, вместоисточника данных, я просто не уверен, что лучший способ сделать это из-за моей необходимости иметь ключ, пару значений перечислений и строк ...