Как создать «встроенный» объект, содержащий элементы для ComboBox? - PullRequest
1 голос
/ 04 октября 2011

У меня есть перечисление в виде:

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

Я хотел бы использовать их в качестве значений в ComboBox, но я бы хотел отобразить строки «Мои вещи» и «Мои вещи» соответственно.

Я уверен, что я видел метод для быстрого создания некоторого определения локального объекта, в котором я могу назначить отображаемое строковое свойство и свойство типа «MyCollections» для хранения значения элемента enum, но Я не могу придумать, как объяснить это поисковой системе.

Может ли кто-нибудь вставить мои смутные воспоминания в какой-то код, который я могу использовать для установки источника данных для моего ComboBox и получения данных, когда пользователь изменяет выбор?

Ответы [ 3 ]

2 голосов
/ 04 октября 2011

Мне нравится создавать простой объект и заполнять ComboBox коллекцией моего простого объекта. Затем я установил для свойства DisplayMember поля со списком имя свойства, которое я хочу отобразить из моего простого объекта.

'Something like this
Class SimpleObject
    Property Name As String
End Class

'And then later...
comboBox.DisplayMember = "Name"
1 голос
/ 04 октября 2011

Я думаю, что это то, что вы хотите - оно перечисляет перечисление, перечисляя значение и текстовую строку значения (без подчеркивания):

    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

Для помещения этих данных в комбинированный список потребуется привязка данных, которая , вероятно, потребует пользовательского класса в вашем случае, но приведенный выше код может помочь вам начать.

0 голосов
/ 05 октября 2011

Да, похоже, я думал о "анонимных типах".Вот код, который отвечает на (варьирующийся, очень расплывчатый) вопрос, который я пытаюсь задать:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...