Hola a todos, buenos días.
Estoy batallando con un combo box pero me está dando problemas el índice cuando recorre los procedimientos del mismo.
Es un combobox normal al cual le quiero insertar una imagen, pero sin recurrir a controles de terceros. He visto este código en google el cual hace lo que necesito.
Private Sub ComboBox1_DrawItem1(sender As Object, e As System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem
Try
e.Graphics.DrawImage(ImageList1.Images(e.Index), e.Bounds.Left, e.Bounds.Top) 'DIBUJA LA IMAGEN
e.Graphics.DrawString(TEXTOS(e.Index), ComboBox1.Font, Brushes.Yellow, e.Bounds.Left + ImageList1.ImageSize.Width + 10, e.Bounds.Top) 'DIBUJA EL TEXTO
Catch ex As Exception
End Try
End Sub
Private Sub ComboBox1_MeasureItem1(sender As Object, e As System.Windows.Forms.MeasureItemEventArgs) Handles ComboBox1.MeasureItem
e.ItemHeight = ImageList1.ImageSize.Height + 5 'PARA SEPARAR LOS ELEMENTOS
End Sub
Private Sub RellenoCboDivisas()
Dim a As Reflection.Assembly = Reflection.Assembly.GetExecutingAssembly
Dim rm As New ResourceManager(a.GetName.Name & ".Textos", a)
ComboBox1.Items.Clear()
TEXTOS = {"hola", "adios", "kaos", "hola1", "adios1", "kaos1", "hola2", "adios2", "kaos2", "UNAs", "DOSs", "TRESs", "CUATROs", "UNAss", "DOSss", "TRESss", "CUATROss"} 'ARRAY ELEMENTOS EN EL MISMO ORDEN QUE EL IMAGELIST
ComboBox1.Items.AddRange(TEXTOS)
ComboBox1.DrawMode = DrawMode.OwnerDrawVariable 'PARA PODER PONER NUESTRAS IMAGENES
ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList 'PARA QUE EN EL TEXTO APAREZCA LA IMAGEN Y EL TEXTO
ComboBox1.DropDownHeight = 200 'PARA QUE MUESTRE TODOS LOS ELEMENTOS. DEPENDE DEL NUMERO DE ELEMENTOS Y SU ALTURA
End sub
El mismo cuando se inicia la carga desde el form, hace salta la excepción: Ocurrió System.ArgumentOutOfRangeException
HResult=-2146233086
Message=InvalidArgument=El valor de '-1' no es válido para 'index'.
Nombre del parámetro: index
ParamName=index
Source=System.Windows.Forms
StackTrace:
en System.Windows.Forms.ImageList.ImageCollection.get_Item(Int32 index)
InnerException:
De otra parte, pregunto si es posible para no tocar nada más de dicho combobox, que a la variable TEXTOS, le pueda pasar una lista que haría a través de lo que ya tenía relleno que era como ejemplo:
'ComboBox1.Items.Add("Afganistán" & " | " & "Moneda: Afgani afgano")
'001
'ComboBox1.Items.Add("Albania" & " | " & "Moneda: Lek albanés")
'002
es decir le pasaría una lista con el país y la moneda.
Es una de las formas que he encontrado en google poara poder insertar una imagen al lado del texto, pero no acaba de funcionar
bien.
Bueno, un cordial saludo a todos.
Gemma