Trabajar Con Los Elementos de Un ListBox
Trabajar Con Los Elementos de Un ListBox
Trabajar Con Los Elementos de Un ListBox
ListBox
Cosas que debes saber sobre los elementos de
un ListBox
(o cómo simular el ItemData de VB6 y otras
cosillas)
Publicado el 24/Ago/2004
Actualizado el 24/Ago/2004
Autor: Guillermo 'guille' Som
En Visual Basic 6, era habitual que además de añadir una cadena al ListBox
quisiéramos añadir o relacionar también un valor numérico con dicha cadena, en
esa versión de VB usábamos el método ItemData para asociar ese valor numérico,
de forma que cada cadena contenida en el ListBox pudiese tener asociado un valor
numérico (¿cuantas veces lo he repetido?).
Para hacerlo, usábamos un código parecido a este:
With List1
.AddItem "elemento 1"
.ItemData(.NewIndex) = 1
.AddItem "elemento 2"
.ItemData(.NewIndex) = 2
End With
Pero en .NET el control ListBox no tiene un método ItemData (ni una propiedad
NewIndex que indicaba cual era el último índice añadido al ListBox), tampoco se
añaden solamente cadenas, ya que la colección Items lo que acepta son elementos
del tipo Object, por tanto podemos añadir cualquier tipo de datos en esa colección,
no solo cadenas, como ocurría en el control ListBox de VB6.
Class LBItem
Public Contenido As String
Public Valor As Integer
End Class
Es decir, creamos una clase a la que podamos asignar una cadena y un entero.
Vamos a añadirle también un constructor que acepte dos parámetros, uno para
asignar a la cadena y otro para asignar al valor numérico:
Debido a que el elemento almacenado en la colección Items es de tipo LBItem, al
recuperarlo debemos hacer una conversión (cast), ya que la colección realmente
almacena elementos del tipo Object.
Nota:
Si en lugar de añadir objetos del tipo LBItem hubiésemos
añadido, por ejemplo datos de tipo String, también deberíamos
hacer una conversión de Object a String al recuperar el valor,
aunque en el caso de String es fácil ya que simplemente sería
necesario usar el método ToString de la propiedad SelectedItem,
pero si en lugar de String lo que tenemos son Integer o Double,
tendríamos que hacer la conversión al tipo adecuado.
Espero que te sea de utilidad.
Nos vemos.
Guillermo
P.S.
Aquí abajo tienes el código completo de VB y de C#.
En ese código se hace la comprobación de que el elemento seleccionado sea del
tipo LBItem, en caso contrario se usa el método ToString del Selecteditem.
Class LBItem
Public Contenido As String
Public Valor As Integer
'
Public Sub New(ByVal c As String, ByVal v As Integer)
Contenido = c
Valor = v
End Sub
'
Public Overrides Function ToString() As String
Return Contenido
End Function
End Class
El código para C#
public class Form1 : System.Windows.Forms.Form
{
//...
//
private void Form1_Load(System.Object sender, System.EventArgs e)
{
ListBox1.Items.Add(new LBItem("Elemento 1", 1));
ListBox1.Items.Add(new LBItem("Elemento 2", 2));
//
// para trabajar con cadenas
ListBox1.Items.Add("Cadena 1");
ListBox1.Items.Add("Cadena 2");
//
// para trabajar con Integer
ListBox1.Items.Add(125);
ListBox1.Items.Add(250);
}
//
private void ListBox1_SelectedIndexChanged(object sender,
System.EventArgs e)
{
// para que valga para cualquier tipo de datos
object o = ListBox1.SelectedItem;
//
if( o is LBItem )
{
LBItem lbi;
lbi = (LBItem)o;
TextBox1.Text = lbi.Contenido;
TextBox2.Text = lbi.Valor.ToString();
}
else
{
TextBox1.Text = ListBox1.SelectedItem.ToString();
TextBox2.Text = "";
}
//
// LBItem lbi;
// lbi = (LBItem)ListBox1.SelectedItem;
// TextBox1.Text = lbi.Contenido;
// TextBox2.Text = lbi.Valor.ToString();
// //
// // si el contenido es de tipo string;
// TextBox1.Text = ListBox1.SelectedItem.ToString();
// //
// // Si el contenido es de tipo int;
// int n = Convert.ToInt32(ListBox1.SelectedItem);
// TextBox1.Text = n.ToString();
// TextBox1.Text = ListBox1.SelectedItem.ToString();
}
}
//
class LBItem
{
public string Contenido;
public int Valor;
//
public LBItem(string c, int v)
{
Contenido = c;
Valor = v;
}
//
public override string ToString()
{
return Contenido;
}
}
Manuales : Listbox y Combobox
Inicio con Visual Basic
IDE
Nuevos proyectos
Estilos programación
Estructuras de datos
Control de un programa
Menús
Funciones del VB
Botones
Listbox y Combobox
Menús y listas
Arrays y controles
Barras de desplazamiento
SDI
MDI
El grid
Archivos
Bases de datos
Las cajas de lista y las cajas combinadas son usadas para proporcionar una lista de
opciones al usuario. En la caja de herramientas estos dos controles estan representados
por : para la caja de lista y para una caja combinada.
Cajas de lista
Una caja de lista es útil cuando al usuario se le presenta un conjunto de opciones fijas
(el puede escoger solamente de las opciones mostradas, no hay posibilidad de teclear
otra alternativa).
Un ejemplo puede ser al ofrecer una lista de los dias de la semana, los lugares para
vacacionar de una agencia de viajes, o los tratamientos ofrecidos por un salón de
belleza.
Para crear una caja de lista, haz doble clic en el icono que esta en la caja de
herramientas. Traza una caja del tamaño que deseas para que contenga los datos dentro
de la forma. El lado izquierdo de la imagen de abajo, muestra una caja de lista que fué
creada en la Form1. En seguida de la imagen está el código que se require para mostrar
una sección de nombres de autos en la lista. Los datos se incluyen en el procedimiento
Sub Form_Load de tal forma que estos aparecerán cuando la Form1 es cargada. Al final
aparece una imagen que muestra como como se verá la forma cuando la aplicación se
ejecuta. Note que las barras de desplazamiento vertical son agregadas automaticamente
si la caja de lista no es lo suficientemente grande para mostrar todas las selecciones.
Sub Form_Load ()
List1.AddItem "Peugot 405"
List1.AddItem "VW Passat"
List1.AddItem "Citroen"
End Sub
En el ejemplo anterior, note que los items en la caja de lista aparecen en el orden en que
fueron tecleados. Pero si cambiamos la propiedad sorteda veradadero (true) en lugar de
falso (false) en la caja de propiedades de este control, los nombres de autos aparecerán
en orden alfabético (primero Citroen).
Se pueden agregar o remover items de la lista en tiempo de ejecución..
Agregar un itema una lista, si la lista esta ordenada, Jaguar 4.2 se colocará en orden
alfabético, de otra forma este item aparecerá al final de la lista.
La lista de items puede ser númerado con 0, 1, 2, etc. Esta expresión insertará Jaguar 4.2
al inicio de la lista. Cuidado de usar este mecanismo cuando la propiedad sorted es
verdadera, porque el resultado puede ser impredecible.
List1.RemoveItem 0
Se puede agregar un item con elegancia, usando una caja de dialogo para entrada de
datos (InputBox). Prueba la siguiente línea de código:
Tarea:
1. Crea la caja de lista que aquí se mostró. Explora como trabaja en tiempo en la
ejecución con la propiedad sortedprimero false y luego true. Luego agrega un
botón de comando como se muestra abajo. Usa este botón con el evento clic,
para agrgar items a lista o para eliminarlos.
2. Crea una caja de texto que muestre el número de items en la lista. Ejecuta la
aplicación y checa el cambio en la caja de texto creada al agregar un item o al
eliminarlo. Create a text box to display the number of items in the list. Run the
application and see this text box change as you add and remove items. Más
abajo se muestra el código que será agregado en le botón de comando usando el
eventoclic. Note que las partes fijas del txto que se muestra entre comillas ( " ),
el valor de la propiedad ListCount esta concatenado por signo llamado
ampersand (&).
3. Sub Command1_Click ()
4. List1.AddItem "Jaguar 4.2"
5.
6. Text1.Text = "Hay " & List1.ListCount & " autos en el
lote."
7.
8. End Sub
Hay tres tipos de Cajas combinadas (0, 1 and 2), El valor que se coloca en la
propiedad style es el que determina el tipo. Las cajas combinadas (estilos 0 y 2)
son una buena opción cuando el espacio es limitado, porque toda la lista se
muestra como un menú de cascada, así no ocupa el espacio en la pantalla hasta
que se da clic a la flecha hacia abajo. Las cajas combinadas (estilos 0 y 1) se
considerá cuando el usuario puede introducir una opción que no este predefinida.
Este tipo de caja no tiene botón de flecha hacia abajo para crear una caja de
cascada, la lista siempre permanece en panatalla. Si todos los items no aparécen,
las barras de despazamiento vertical aparecenrán automaticamente. Como en el
tipo anterior, los usuarios pueden introducir texto en el campo de edición.
Este control se comporta como una caja de lista, solo que al seleccionar no se
muestran todos los items, estos aparecen hasta que se da clic a la flecha hacia
abajo. el usuario puede seleccioar de la lista, no se puede introducir texto.
Tip: Cuando selecciones los controles en este ejercicio, toma en cuenta los
aprendidos en turoriales anteriores. Usa la propiedad Visible para hacer que la
lista apropiada sea visible/invisible según se requiera. Trata de importar
imágenes y gráficos de otos paquetes incluyendo el Word Art.