A vueltas con .NET: ComboBox Multi-Columna

Aunque parezca mentira Visual Basic 2008 no incorpora por defecto un ComboBox capaz de mostrar varias columnas de datos. La única manera de hacerlo es programarlo nosotros mismos o buscar ese control por Internet.

Como ya os imaginais a estas alturas, no vamos a inventar nada que ya esté inventado y funcione perfectamente. Por tanto, vamos a añadir el control capaz de hacer lo que queremos y explicar cómo utilizarlo para mostrar los datos que nos interese. En nuestro caso vamos a utilizar el control Icon ComboBox, creado por Steve McMahon, de la conocida página vbaccelerator

iconcombobox

¿Cómo añadir el control a nuestro proyecto?

Lo primero será descargar el control.

Una vez descargado tenemos que añadir el control al toolbox de nuestro proyecto. Clickando con el botón derecho del ratón encima del toolbox marcamos “Choose Items“, dentro del nuevo menú le damos a Browse y seleccionamos el archivo .dll del control.

Llegados a éste punto tenemos el nuevo control añadido al toolbox y listo para usarse. Lo siguiente será añadir el control al formulario, declararlo, modificar los aspectos visuales y empezar a pasarle valores. Vamos a ello.

Añadir el control al formulario se hace igual que cualquier otro control de los que vienen por defecte en Visual Studio, por tanto arrastramos el control al formulario y empezamos a trabajar con él.

Declaramos el control. Como veis se trata de definir cuántas columnas va a tener el control y el espacio que van a ocupar:


Dim column As IconComboBoxColumn = New IconComboBoxColumn

'Por defecto el control ya trae una columna, sólo cambiamos su tamaño
IconComboDepartamento.Columns(0).ColumnWidth = 128

'Segunda columna
column.ColumnWidth = 32
IconComboDepartamento.Columns.Add(column)

'Tercera columna

column = New IconComboBoxColumn
column.ColumnWidth = 96
IconComboDepartamento.Columns.Add(column)

Ya tenemos el control declarado, ahora solo falta poblarlo y mostrarlo. El método para poblar el control consiste en añadirle Items, cada item es una linea del combobox y a cada item le añadiremos tantos subitems como columnas tengamos en el control. Con el ejemplo queda más claro.


Dim ici As IconComboItem = New IconComboItem
ici.Text = "Informática"

Dim subitem As IconComboSubItem = New IconComboSubItem
subitem.Text = "5 trabajadores"
ici.SubItems.Add(subitem)

subitem = New IconComboSubItem
subitem.Text = "Piso superior"
ici.SubItems.Add(subitem)

IconComboDepartamento.Items.Add(ici)

De éste manera hemos añadido una linea al combobox de 3 columnas.

Posts Relacionados:

  1. A vueltas con .NET: Minimizar formulario en la barra de tareas Desde hace algún algo más de un mes estoy aprendiendo...
  2. A vueltas con .NET: Modificar Connection Strings en Runtime Esto del .NET me parece alucinante, la de cosas que...
  3. LiberKey, el multi-usos suizo de las aplicaciones portables Las aplicaciones portalbes están a la orden del día. Cada...

8 Comments

  • Información Bitacoras.com…

    Valora en Bitacoras.com: Aunque parezca mentira Visual Basic 2008 no incorpora por defecto un ComboBox capaz de mostrar varias columnas de datos. La única manera de hacerlo es programarlo nosotros mismos o buscar ese control por Internet. Como ya os ….

  • No me agrega columnas a mi combo, hice exactamente lo que aparece ahí, inclusive intente ccambiarlo de las propiedades del control y tampoco me deja. Agredeceré su pronta respuesta.
    Muchas gracias

  • Falta agregar el item ici al Combo

    IconComboDepartamento.items.Add(ici)

  • Al dar click sobre el combo como puedo tomar la informacion de la segunda columna para colocarla en una caja de texto?

  • ya cai en cuenta,

    “.SelectedItem.SubItems(0).Text” me entrega la información de la segunda columna.
    ;)

  • Hola, he seguido los pasos de esta guía, mi código parece no tener errores, sin embargo, no me agrega los datos al combo. Utilizo Visual Studio 2010 VB, alguien podria ayudarme???

    Gracias

  • Para dar una idea de mi problema, este es mi código
    Private Sub registros_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    MsgBox(“Iniciando”)
    Dim column As vbAccelerator.Components.Controls.IconComboBoxColumn = New vbAccelerator.Components.Controls.IconComboBoxColumn

    ‘Por defecto el control ya trae una columna, sólo cambiamos su tamaño
    IconComboBox1.Columns(0).ColumnWidth = 128

    ‘Segunda columna
    column.ColumnWidth = 32
    IconComboBox1.Columns.Add(column)

    ‘Tercera columna

    column = New vbAccelerator.Components.Controls.IconComboBoxColumn
    column.ColumnWidth = 96
    IconComboBox1.Columns.Add(column)

    Dim ici As vbAccelerator.Components.Controls.IconComboItem = New vbAccelerator.Components.Controls.IconComboItem
    ici.Text = “Informática”

    Dim subitem As vbAccelerator.Components.Controls.IconComboSubItem = New vbAccelerator.Components.Controls.IconComboSubItem
    subitem.Text = “5 trabajadores”
    ici.SubItems.Add(subitem)

    subitem = New vbAccelerator.Components.Controls.IconComboSubItem
    subitem.Text = “Piso superior”
    ici.SubItems.Add(subitem)

    IconComboBox1.Items.Add(ici)
    End Sub

  • A mi me pasa lo mismo, si solamente agrego un solo item, estoy en vb.net 2005.

    Y tuve que agregar la referencia y hacer el.

    Imports vbAccelerator.Components.Controls

Leave a comment