vb.net dictionary combobox enumeration indexof

vb.net - IndexOf ComboBox simplemente no funcionará para mí



dictionary enumeration (1)

En primer lugar, tienes una colección de enteros y estás buscando el valor enum. Para eso, pruebe uno de los siguientes:

  1. Almacene el valor enum en el diccionario en lugar de una cadena:

    Dim dUnits As New Dictionary(Of String, eUnits)

  2. Mantenga los enteros en el Diccionario, pero use el valor entero de la enumeración cuando busque en el ComboBox:

    Dim idx As Integer = cbo.Items.IndexOf(CInt(defUnits))

Pero esto no va a funcionar todavía . Estás vinculado a un Dictionary , lo que significa que los elementos en cbo.Items no son del tipo enum, sino del tipo de los elementos en el Diccionario ( KeyValuePair(Of String, eUnits) asumiendo el n. ° 1 anterior).

La solución más sencilla es establecer la propiedad SelectedValue del cuadro combinado en lugar de SelectedIndex . Suponiendo que utilizó la opción n. ° 1 anterior, esto sería:

cbo.SelectedValue = defUnits

Si utilizó la opción n. ° 2, primero deberá convertirla en un número entero:

cbo.SelectedValue = CInt(defUnits)

VB2010. Intento poblar un ComboBox con el contenido de una enumeración de unidades. He logrado hacer esto con un diccionario. Algo como

Dim dUnits As New Dictionary(Of String, Integer) Dim da As String For Each enumValue As eUnits In System.Enum.GetValues(GetType(eUnits)) da = ConvertEnumToCommonName ''gets unique name for an enumeration dUnits.Add(da, enumValue) Next cbo.DisplayMember = "Key" ''display the the common name cbo.ValueMember = "Value" ''use the enumeration as the value cbo.DataSource = New BindingSource(dUnits, Nothing)

Cuando cargo mi formulario que funciona bien. Ahora el usuario puede elegir seleccionar una unidad predeterminada para mostrar. Entonces lo intento

Dim defUnits As eUnits = eUnits.Feet Dim idx As Integer = cbo.Items.IndexOf(defUnits) ''doesnt work, returns a -1 cbo.SelectedIndex = idx

He estado haciendo una investigación durante algún tiempo y estoy bastante seguro de que esto tiene que ver con el almacenamiento de valores de ComboBox como una cadena y en realidad estoy buscando una enumeración que es un número entero. No sé si tengo ese derecho o no. De todos modos, parece que no puedo obtener el elemento predeterminado seleccionado. ¿Hay otro enfoque que pueda probar?