Está en la página 1de 27

Capítulo

listas 5
Objetivo General:
Conocer y emplear el objeto Lista, sus propiedades, métodos, eventos y sus
diversas aplicaciones.

Objetivos Específicos:
1. Conocer la estructura de una lista para comprender su comportamiento.
2. Conocer y aplicar el uso de las propiedades, métodos y eventos de las
listas: ListBox y ComboBox.
3. Conocer los criterios de validación a considerar en las listas.
4. Aplicar algoritmos propios para el trabajo con los datos de una lista.
5. Comprender el manejo de listas multicolumna y multiselección.
Temas:
1. Estructura.
2. Propiedades y métodos básicos.
3. Validación de acciones en la lista.
4. Algoritmos aplicados a listas.
5. Listas multicolumna.
6. Listas multiselección.
Listas
En este capítulo revisaremos el control ListBox y ComboBox como base para la
comprensión del funcionamiento y comportamiento de las listas.

Estos controles Windows son bastante empleados en la programación de


aplicaciones y en estos me voy a centrar, tratando de explicar aquellas
características más destacadas de este tipo de controles.

En Visual Basic .NET, las listas han cambiado ligeramente su manejo respecto de
versiones anteriores de Visual Basic (6.0 y anteriores).

Estructura
Las diferentes listas se encargan de contener elementos (items), lo que requiere
que nos podamos referimos individualmente a cada uno. Para esto la lista se
organiza considerando índices para cada uno de los elementos de la colección
contenida.

fndicey colecciónde elementos


El índice es una numeración correlativa que inicia en O (cero) y que se asocia a
cada uno de los elementos (items) de la colección de una lista, según el orden que
ocupan en esta.

A continuación, como ejemplo se muestra un un ListBox con 6 datos:

Jorge
Silvia
Giorgio
Carmen
María
Luis

Para este caso los datos en la lista se organizan como se muestra a continuación:

Indice ltenn
~---~
O Jc.rge
1 Silvia
2 Giorgio
3 Carmen
4 María
5 Luis

Liste

Luego, por ejemplo podemos referimos al tercer elemento con el índice (index) 2
o si no hay elementos duplicados por el Item Giorgio.
Propiedades y métodos básicos

ListBox
A continuación se muestran las propiedades, métodos y eventos del ListBox,

D
excluyendo las herencias provenientes de la clase control:

!~ ListBox

Propiedades
Descripción
(ListBox)
Reemplazado. Obtiene o establece el diseño de la imagen
de fondo para un ListBox tal como se define en la
Backaround lm,.,,elavout enumeración ímecetavout,
Obtiene o establece el tipo de borde que se dibuja
BorderStvle alrededor de ListBox.
Obtiene o estableoe el ancho de las columnas de un control
ColumnWidth ListBox de varias columnas.
Obtiene !Container que contiene Component.(Se hereda de
Container Comoonent).
Obtiene el ancho de las fichas entre los elementos del
CustomTabOffsets ListBox.
Obtiene o establece el origen de datos de este objeto
DataSource ListControl.(Se hereda de ListControl).
Obtiene o establece la propiedad que se va a mostrar para
DisplavMember este ListControl.{Se hereda de ListControl).
DrawMode Obtiene o establece el modo de dibuio del control.
Obtiene o establece IFormatProvider que proporciona el
comportamiento de formato personalizado. (Se hereda de
Formatlnfo ListControll.
Obtiene o establece los caracteres especificadores de
~rmato que indican cómo se va a mostrar un valor.(Se
FormatString hereda de ListControl).
Obtiene o estableoe un valor que indica si el formato se
aplica a la propiedad DisplayMember del ListControl.(Se
Formattinc:iEnabled hereda de ListControl).
Obtiene o establece el ancho por el que puede desplazarse
HorizontalExtent la barra de desplazamiento horizontal de un control ListBox.
Obtiene o establece un valor que indica si se muestra una
HorizontalScrollbar barra de desolazamiento horizontal en el control.
Obtiene o establece un valor que indica si el control debe
cambiar de tamaño para evitar que se muestre sólo una
lntegralHeight parte de los elementos.
ltemHeiaht Obtiene o establece el alto de un elemento de ListBox.
ltems Obtiene los elementos del control ListBox.
Obtiene o establece un valor que indica si el control ListBox
MultiColumn admite varias columnas.
Paddina Esta propiedad no es relevante oara esta clase.
Obtiene el alto combinado de todos los elementos del
PreferredHeiaht control ListBox.
Reemplazado. Obtiene o establece un valor que indica si el
texto que muestra el control apareoe de derecha a
RiahtToLeft Í7nUierda.
Propiedades
Descripción
(ListBox)
Obtiene o establece un valor que indica si la barra de
ScrollAlwavsVisible desolazamiento vertical se muestra siemore.
Reemplazado. Obtiene o establece el índice de base cero
Selectedlndex del elemento actualmente seleccionado en ListBox.
Obtiene una colección que contiene los índices de base
cero de todos los elementos actualmente seleccionados en
Selected Indices el control ListBox.
Obtiene o establece el elemento actualmente seleccionado
Selectedltem en el control ListBox.
Obtiene una colección que contiene los elementos
Selectedltems actualmente seleccionados en el control ListBox.
Obtiene o establece el valor de la propiedad miembro
especificada por la propiedad ValueMember.(Se hereda de
SelectedValue ListControl).
Obtiene o establece el método en el que se seleccionan los
SelectionMode elementos del control ListBox.
Obtiene o establece un valor que indica si los elementos del
Sorted control ListBox se ordenan alfabéticamente.
Reemplazado. Obtiene o busca el texto del elemento
Text actualmente seleccionado en el control ListBox.
Obtiene o establece el índice del primer elemento visible del
Toplndex control ListBox.
Obtiene o establece un valor que indica si el ListBox
reconoce y expande los caracteres de tabulación cuando
dibuja sus cadenas utilizando la matriz de enteros
UseCustomTabOffsets CustomTabOffsets.
Obtiene o establece un valor que indica si el control ListBox
puede reconocer y expandir los caracteres de tabulación al
userabstoos dibuiar sus cadenas.
Obtiene o establece la propiedad que se utilizará como
valor real para los elementos del ListControl.(Se hereda de
ValueMember ListControll.

Métodos
Descripción
(ListBox)
Mantiene el rendimiento mientras se agregan elementos al
control ListBox de uno en uno al impedir que se dibuje el
BeainUpdate control hasta aue se llame al método EndUpdate.
Anula la selección de todos los elementos del control
ClearSelected ListBox.
Crea un objeto que contiene toda la información relevante
necesaria para generar un proxy utilizado para comunicarse
CreateObjRef con un obieto remoto. (Se hereda de MarshalByRefObiect).
Reanuda el dibujo del control ListBox después de haber
EndUpdate sido suspendido cor el método BeainUpdate.
Sobrecargado. Determina si dos instancias de Object son
Eauals iauales. (Se hereda de Objact).
Sobrecargado. Busca el primer elemento del control ListBox
FindStrina aue comience oor la cadena esoecíficada.
Sobrecargado. Busca el primer elemento del control ListBox
FindStringExact que coincida exactamente con la cadena especificada.
Métodos
Descripción
(ListBox)
Sirve como función hash para un tipo concreto.
GetHashCode es apropiado para su utilización en
algoritmos de hash y en estructuras de datos como las
GetHashCode tablas hash. (Se hereda de Obiect).
GetltemHeight Devuelve el alto de un elemento del control ListBox.
Devuelve el rectángulo delimitador de un elemento del
GetltemRectanale control ListBox.
Devuelve la representación de texto del elemento
GetltemText especificado. (Se hereda de ListControl).
Recupera el objeto de servicio de duración actual que
controla la directiva de duración de esta instancia. (Se
GetLifetimeService hereda de MarshalBvRefObiecO.
Devuelve un valor que indica si el elemento especificado
GetSelected está seleccionado.
Sobrecargado. Devuelve el índice de base cero del
lndexFromPoint elemento en las coordenadas especificadas.
Obtiene un objeto de servicio de duración para controlar la
directiva de duración de esta instancia. (Se hereda de
lnitializeLifetimeService MarshalBvRefObiect ).
Activa o desactiva la selección del elemento especificado
SetSelected de un control ListBox.

Eventos
Descripción
(ListBox)
Se produce cuando cambia la propiedad
BackaroundlmaoeChanaed Backaroundlmaoe de la etiaueta.
Se produce cuando cambia la propiedad
Backaround lm,.,,eLavoutChanaed BackaroundlmaaeLavout.
Se produce cuando se hace clic en el control
Click ListBox.
Se produce cuando DataSource cambia.(Se hereda
DataSourceChanaed de ListControl).
Se produce cuando cambia la propiedad
DisplavMemberChanaed DisolavMember.(Se hereda de ListControl).
Agrega un controlador de eventos para escuchar el
evento Disposed en el componente.(Se hereda de
Disoosed Comoonenn.
Se produce cuando cambia la apariencia de un
Drawltem control ListBox dibuiado por el propietario.
Aparece cuando el control se enlaza a un valor de
Formal datos.(Se hereda de ListControl).
Se produce cuando el valor de la propiedad
FormatlnfoChanaed Formatlnfo cambia.(Se hereda de ListControl).
Se produce cuando el valor de la propiedad
FormatStrinaChanned FormatStrina cambia.lSe hereda de ListControl\.
Se produce cuando el valor de la propiedad
FormattingEnabled cambia.(Se hereda de
FormattingEnabledChanged ListControl).
Se produce cuando se crea un control ListBox
dibujado por el propietario y se determina el
Measureltem tamaño de los elementos de la lista.
Aparece cuando el usuario hace clic en el control
MouseClick ListBox con el puntero del mouse (ratón).
Eventos
Descripción
(ListBox)
Se produce cuando el valor de la propiedad
PaddinaChanaed Paddina cambia.
Paint Se oroduce cuando se dibuia el control ListBox.
Se produce cuando ha cambiado la propiedad
SelectedlndexChanged Selectedlndex.
Se produce cuando cambia la propiedad
SelectedValueChanaed SelectedValue.(Se hereda de ListControl).
TextChanaed Se oroduce cuando cambia la orooiedad Text.
Se produce cuando cambia la propiedad
ValueMemberChanaed ValueMember.lSe hereda de ListControll.

ComboBox
En el caso del ComboBox, este tiene un doble comportamiento: Como cuadro de
texto y como Lista. A continuación se muestran sus propiedades, métodos y
eventos, excluyendo los heredados de la clase control.

!~ ComboBox

Propiedades
Descripción
{ComboBox)
Obtiene o establece un System.Collections.Specialized.
StringCollection personalizado que se utilice cuando la
propiedad AutoCompleteSource se establezca en
AutoComoleteCustomSource CustomSource.
Obtiene o establece una opción que controla cómo
funciona la funcionalidad de autocompletar para el
AutoComoleteMode control ComboBox.
Obtiene o establece un valor que especifica el origen de
las cadenas completas utilizado para la función de
AutoComoleteSource autocomoletar.
Obtiene o establece el origen de datos de este objeto
DataSource ComboBox.
Obtiene o establece un valor que indica si el oodigo o el
sistema operativo controlarán las operaciones de dibujo
DrawMode de elementos de la lista.
Obtiene o establece el alto, en píxeles, de la parte de
DrooDownHeiaht ruadro desoleaable del ComboBox.
Obtiene o establece un valor que especifica el estilo del
DrooDownStvle aradro combinado.
Obtiene o establece el ancho de la parte desplegable de
DropDownWidth un cuadro combinado.
Obtiene o establece un valor que indica si el cuadro
DroooedDown oombinado está mostrando la oarte desoleaable.
FlatStvle Obtiene o establece la apariencia del ComboBox.
Obtiene o establece un valor que indica si el control
debe cambiar de tamaño para evitar que se muestre
lntearalHeiaht sólo una oarte de los elementos.
Obtiene o establece el alto de un elemento en el cuadro
ltemHeight oombinado.
Obtiene un objeto que representa la colección de los
ltems elementos aue contiene el ComboBox.
Propiedades
Descripción
(ComboBox)
Obtiene o establece el número máximo de elementos
(J.le se van a mostrar en la parte desplegable del
MaxDrooDown ltems ComboBox.
Obtiene o establece el número máximo de caracteres
posíojes en la parte modificable de un cuadro
Maxlenath oombinado.
Paddina Esta propiedad no es relevante para esta clase.
PreferredHeiaht Obtiene el alto preferido del ComboBox.
Reemplazado. Obtiene o establece el índice que
específica el elemento seleccionado actualmente.
Selected lndex
Obtiene o establece el elemento seleccionado
Selectedltem a:tualmente en el ComboBox.

Obtiene o establece el texto que se selecciona en la


SelectedText parte de un ComboBox que se puede editar.

Obtiene o establece el número de caracteres


seleccionados en la parte de un cuadro combinado que
se puede editar.
Selectionlength
Obtiene o establece el índice de inicio del texto
SelectionStart seleccionado en el cuadro combinado.

Obtiene o establece un valor que indica si los elementos


del cuadro combinado están ordenados.
Sorted

Métodos
Descripción
(ComboBox)
Mantiene el rendimiento cuando se agregan elementos
BeainUodate al ComboBox de uno en uno.
Reanuda el dibujo del control ComboBox después de
EndUodate haber sido susoendido por el método BeoinUodate.
Busca el primer elemento del control ComboBox que
FindStrina comience cor la cadena esoecíficada.
Busca el elemento que coincide exactamente con la
FindSlrinaExact cadena esoecíficada.
Sirve como función hash para un tipo concreto.
GetHashCode es apropiado para su utilización en
algoritmos de hash y en estructuras de datos como las
GetHashCode tablas hash.
GetltemHeiaht Devuelve el alto de un elemento del control ComboBox.
Selecciona todo el texto de la parte editable del
SelectAII ComboBox.

Eventos
Descripción
(ComboBox)
Se produce cuando el valor de la propiedad
Backaround lm,.,,eChanaed Backaroundlmaae cambia.
Se produce cuando cambia la propiedad
BackgroundlmaaelayoutChanged Backgroundlmagelayout.
DataSourceChanaed Se produce cuando DataSource cambia.
Eventos
Descripción
(ComboBox)
Agrega un controlador de eventos para escuchar el
Disposed evento Disoosed en el componente.
DoubleClick Este evento no es relevante para esta clase.
Se produce cuando cambia la apariencia de un
Drawltem control ComboBox dibuíado por el propietario.
Se produce cuando se muestra la parte
DrooDown desoleoable de un ComboBox.
Aparece cuando la parte desplegable de
DropDownClosed ComboBox deia de ser visible.
Se produce cuando ha cambiado la propiedad
DropDownStvleChanaed DropDownStvle.
Se produce cada vez que hay que dibujar un
elemento de ComboBox dibujado por el usuario y
cuando los tamaños de los elementos de lista
Measureltem vienen determinados.
PeddinoChannAd Este evento no es relevante cara esta clase.
Se produce cuando vuelve a dibujarse el control
Paint ComboBox.
Se produce cuando ha cambiado la propiedad
SelectedlndexChanaed Selected lndex.
Se produce cuando se ha cambiado el elemento
seleccionado y se confirma el cambio en el
SelectíonChanoeCommítted ComboBox.
Aparece cuando el control ha dado formato al texto,
TextUodate oero antes de oue éste se muestre.

Adiciónde elementos
Los elementos en una lista se encuentran contenidos en la propiedad Item, la cual
puede ser modificada en tiempo de diseño en la ventana de propiedades, como se
muestra:

Propiedades .... q. X

ListBoxl svstem, Window:s:. Form:s:. ListBox •

ltems (Colección)

Y luego escribiendo los elementos y presionando Enter, en la ventana que se


muestra y Aceptar para finalizar.

Considerar que el orden en que se digiten los datos será el orden para mostrarlos;
y se asignará un index a partir del O para el primer elemento.
Editor de la colección Cadena [1][8]
Escrib.c1 las cadenas en la colección (un<1 por línea):
Lima
Caj<1marca
rea
Loreto
Cuscol

I
.....
Aceptar ~ Cancelar

Por código se agregan elementos empleando el método Add en la colección Items.


Por ejemplo para agregar un departamento más a la lista mostrada Listñoxl , se
aplica la siguiente linea de código:

ListBoxl. Lt.ems . Add ( ",Junin")

Selección
Los elementos de una lista pueden identificarse por su item (elemento) o por su
index (indice). Por tal motivo podemos obtener estas dos propiedades a partir de la
selección realizada por el usuario.

Por ejemplo, para la elección realizada en la siguiente lista:

Lima
Caja marca
lea
Loreto
Cusco

Y el siguiente código:
Dim indice As Integer
Dim elemento As String
indice= ListBoxl.Selectedlndex()
elemento= ListBox1.Selecteditem

Obtendríamos los siguientes valores para las variables:


indice = 4
elemento = "Loreto"

Debemos tener en cuenta que en el caso de no haber ningún elemento


seleccionado en la lista, los valores obtenidos para cada variable en este ejemplo
serian:
indice = -1 (menos 1)
elemento = ",, (vacío)
Podemos emplear estas mismas propiedades Selectedlndex y Selectedltem para
marcar o seleccionar un elemento en la lista utilizando código.

Por ejemplo cualquiera de las siguientes líneas de código permitiría marcar el


primer elemento de la lista: Lima.

ListBoxl.Selectedinctex() = o
ListBoxl.Selecteditem "Lima" =
Se recomienda emplear Selectedlndex para estos casos, debido a que el índice es
único, sin embargo el elemento puede estar duplicado más de una vez en la lista;
en este caso se tomará el primero (el que tiene un menor index).

Conteo de elementos

La manera de obtener la cantidad de elementos de una lista, es empleando la


propiedad count de la colección items.

Considerando el ejemplo anterior, el siguiente código le darla a la variable cantel


valor 5.
Dim cant As Integer
cant ~ ListBoxl.Items.Count

Podemos emplear esta propiedad para ubicar el ultimo elemento en una lista,
considerando que el conteo de indices que inicia en O, el indice del último
elemento es el conteo de la lista menos l.

Por ejemplo, para seleccionar el último elemento de la lista por código podemos
emplear:

ListBoxl.Selectedindex = ListBoxl.Items.Count - 1

Borrartodoslos elementos
La manera de eliminar todos los elementos de la lista es empleando el método
clear de la colección ltems.

Por ejemplo para eliminar todos los elementos del listboxl debemos considerar el
siguiente código:

ListBoxl.Items.Clear()

Eliminarpor índice y por elemento


Para eliminar elementos independientes, es decir no borrar toda la lista sino
solamente algunos elementos, debemos considerar alguno de estos dos métodos:
Remove o RemoveAt de la colección items de la lista.
El método Remove elimina un dato de la lista considerando su item (elemento);
mientras que el método RemoveAt elimina el dato considerando el index (índice).

Por ejemplo, cualquiera de las siguientes líneas de código eliminaría al elemento


Jea con índice 2:

Li stE oxl. Item:,. Remove ( "Ic a")


ListEoxl.Item:i.RemoveAt(2)

Se recomienda emplear el método RemoveAt, por que el índice del dato en la lista
es único, sin embargo el elemento podría duplicarse y habría cierta confusión
cuando se intente eliminar un dato que se encuentre duplicado.

Es frecuente, en el manejo de listas, tener la necesidad de eliminar el elemento


seleccionado, de allí que combinando la propiedad Selectedlndex y el método
RemoveAt podemos hacer esta tarea, de la siguiente manera, para una lista
ListBoxl:

ListBoxl.Items.RemoveAt(ListBoxl.Selectedindex)

Modificaciónde elementos
Para poder modificar un elemento en particular de la lista, debemos poder
referirnos a el de manera exclusiva dentro de la colección items, y esto se logra
refiriendo el index (índice) del elemento que queremos modificar.

Para el ejemplo de la lista con algunos departamentos del Perú, para modificar el
elemento con índice 2 ("Jea") por otro departamento empleamos la siguiente línea
de código:

ListEox 1. Iteras (2) = "Madre de Dios"

Adicionalmente podemos considerar que la referencia a un elemento de la lista no


solo es para modificar su contenido sino también para saber que elemento se
encuentra en un índice en particular.

Por ejemplo, para mostrar en un cuadro de mensaje el elemento contenido en el


índice 2 empleamos la siguiente línea de código:

MsgBox(ListBoxl.Items(Z))

Podría, de manera similar, asignar el valor de este elemento a una variable tipo
String, como se muestra:

D am Dato A:i Str ing


Dato~ LiatBox1.Itema(2)
Buscar elementos

Para buscar datos en una lista debemos considerar los métodos FindStringExact o
FindString. El primero de estos permite ubicar un dato realizando una búsqueda.
exacta, y el segundo con una búsqueda aproximada. Ambos métodos nos retoman
un valor entero con el número del índice de la coincidencia encontrada.

Por ejemplo, para realizar la búsqueda exacta de un elemento en una lista


empleando el método FindStringExact, se consideraría el siguiente código:

indice = ListBoxl. F indStr ingExac:t ( "Caj art1arca")

Y para búsquedas aproximadas, empleamos el método FindString:

indice = L istBoxl. F indStr ing ( "Caj "l

El código para realizar una búsqueda y seflalar lo encontrado en la lista es el


siguiente. Podría ensayarse el cambio de la segunda línea con cualquiera de los
casos anteriores en la lista de departamentos del Perú.:

Dim indice As Integer


indice ~ ListBox1.FindString("Caj")
Li~tBoxl.Selectedindex ~ indice

Obtendríamos el siguiente resultado para cualquiera de los casos. La búsqueda


aproximada busca la coincidencia más próxima. No se diferencian mayúsculas de
minúsculas.

lee
Loreto
Cu seo

En caso de que se realice la búsqueda de un elemento y este no pueda ser ubicado


en la lista, el valor del índice de respuesta es -1 (menos uno).

Validación de acciones en la lista


La validación consiste en evitar errores por el mal uso de las propiedades y
métodos en una lista. Para esto básicamente emplearemos sentencias
condicionales if.. then ... else ... end if. Con esta finalidad debemos tener las
siguientes consideraciones en las acciones a realizar en la lista:

Validación en la adición de elementos


Debemos evitar la adición de elementos vacíos a la lista o de espacios en blanco
innecesarios a los extremos, validando la cadena a ingresar.
Otra consideración, según el caso, puede estar dada en evitar duplicados en la
lista, lo que requerirá hacer una búsqueda. en los elementos antes de la adición
para verificar la existencia o no del elemento que se intenta agregar.

Validación en la selección de elementos


Debemos evitar la selección de elementos con índices fuera del rango permitido
en la lista. Este rango va de -1 para ningún elemento, O para el primer elemento, 1
para el segundo elemento y así sucesivamente hasta el último elemento
Listlioxl.Items.Couni-I,

Validación en el conteo de elementos


En este caso, solo debemos evitar tener elementos vacíos en la lista para que el
conteo sea apropiado. Un error común es cuando se presiona un ENTER al final
de la colección de Ítems de los elementos de la lista en el diseño. En la ejecución
debe evitarse esto por validación el la adición.

Advertencia para el borrado de elementos


Para la eliminación total de los elementos de la lista no se requiere validación,
pero se recomienda mostrar una advertencia al usuario para pedir la confirmación
de su acción empleando un cuadro de mensajes (MsgBox).

Validación en la eliminaciónde elementos


Debe validarse el índice del elemento que se piensa eliminar; este debe hacer
mención a un elemento existente en la lista ( debe ser mayor o igual a cero y
menor que el conteo de la lista). Adicionalmente se podría considerarse alguna
advertencia, dependiendo de la importancia de los datos involucrados.

Validación en la modificación de elementos


Para modificar un elemento, debemos considerar que el índice señalado exista en
la lista. Además debemos evitar que la modificación coloque datos vacíos o con
espacios en blanco en los extremos. Adicionalmente, según el caso, debemos
evitar o no datos duplicados.

Validación en la búsqueda de elementos


Debemos considerar que la búsqueda no se haga a través de una cadena vacía o
con espacios innecesarios, además se sugiere entregar como respuesta un mensaje
en caso de que la búsqueda no obtenga ningún resultado (índice= -1). Además
debe tenerse en cuenta que en caso de varias coincidencias, la búsqueda obtiene el
primer resultado.
Información
adicional Para la validación emplearemos algunas funciones Visual Basic para cadenas:
Len(cadena) Permite obtener la cantidad de caracteres del al cadena.
Trim(Cadena) Permite obtener una cadena sin espacios a los lados.
Actividad l. Crear una aplicación para el manejo de un ListBox con
validación

Objetivo
Aplicar y comprender el uso de listas y sus operaciones básicas, con
criterios de validación para las diferentes acciones.

Procedimiento:
Cada opción es independiente, se sugiere agregar el botón, asociar código
e ir ejecutando y probando.

1. Crear la siguiente interfase:


-
~ Manejo del listBox ~§~

D isltitos de Lima: Agregar


San Martín de Parres
Los Olivos Selección
Chosica
Magdalena del Mar Contar
Pueblo Libre
Surquillo B orr 11r todo
Comas
Breña Eliminar

Modificar

Buscar

Mostrar

Salir 1)
11

2. Codificar como se muestra:

Public Class Forml

Prívate Sub BtnAgregar Click(ByVal sender As System.Cbject,


ByVal e As System.EventArgs) Handles BtnAgregar.Click
Dim elemento As String
elemento= InputBox("Ingresa un distrito ele Lima")
elemento= Trim(elemento)
If Ien(elemento) > O Then
ListBoxl.Items . .lldd(elemento)
End If
End Sub
Private Sub BtnSelea:ion_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
BtnSeleccion.Click
Dim elemento As String
Dim indice As Integer
indice= ListBoxl.Selectedindex
elemento= ListBoxl.Selecteditem
MsgB:>x ("Elerrento: " & elarento & Chr(l3) & "Irdioe: " & indice)
End Sub

Private Sub BtnContar_Click(ByVal sender As System.Cbject,


ByVale As System.EventArgs) Handles BtnC.ontar.Click
Dim cant As Integer
Cant = ListBoxl.Items.C.ount
MsgBox("cantidad de elementos: " & cant)
End Sub

Private Sub BtnBorrar Click(ByVal sender As System.Cbject,


ByVale As System.EventArgs) Handles BtnBorrar.Click
If MsgBox("¿Borrar todo?",
MsgBoxStyle. YesNo)= MsgBoxResult.Yes Then
ListBoxl.Items.Clear()
End If
End Sub

Pri vate Sub BtnEliminar_Click (ByVal sender As


System.Object, ByVal e As System.EventArgs) Handles
BtnEliminar. Click
Dim indice As Integer
indice= ListBoxl.Selectedindex
If indice >= O Then
ListBoxl.Items.R:moveAt(indice)
Else
MsgBCl){("Selea:ionar un elerrento")
End If
End Sub

Private Sub BtnModificar Click(ByVal sender As


System.Object, ByVal e As System.EventArgs) Handles
BtnModificar.Click
Dim elemento, camaío As String
Dim indice As Integer
indice= ListBoxl.Selectedindex
If indice >= O Then
elemento= ListBoxl.Selecteditem
canbio = !npJt8Cl){("M:x:li.ficar distrito:", , elarento)
cambio= Trim(cambio)
If Len(cambio) > O Then
ListBoxl.Items(indice) = cambio
End If
Else
MsgBox("Seleccionar elemento")
End If
End Sub

Private Sub BtnBuscar_Click(ByVal sender As System.Cbject,


ByVal e As System.EventArgs) Handles BtnBuscar.Click
Dirn busca As String
Dim indice As Integer
busca = InputBox ("Buscar distrito:")
If busca .Length > O Then
indice= ListBoxl.FindStringExact(busca)
If indice= -1 Then
MsgBox("Elemento no encontrad::>")
Else
ListBoxl.Selectedindex = indice
End If
End If
End Sub

Private Sub BtnMostrar_Click(ByVal sender As System.Cbject,


ByVal e As System.EventArgs) Handles BtnMostrar.Click
Dim Datos As String = ""
Dim i As Integer
For i = O To ListBoxl.Items.Count - 1
Datos = Datos & ListBoxl. Items {i) & Chr (13)
Next
MsgBox(Datos)
End Sub

Private Sub BtnSalir Click{ByVal sender As System.Cbject,


ByVal e As System. EventArgs) Handles BtnSalir. Click
End
End Sub

End Class

3. Ejecuta y revisa el funcionamiento del código programado. Realiza


"pruebas tontas" es decir intenta agregar datos vacíos o con espacios,
intenta eliminar un elemento sin seleccionarlo, etc.
Algoritmos aplicados a listas
Hasta este momento hemos aplicado casi de manera directa las funciones básicas
a realizar en una lista. En esta sección a manera de ejemplo buscaremos ampliar
las funciones de las listas en nuestras aplicaciones obligados por los
requerimientos a programar el comportamiento de estas según nuestras
necesidades aplicando algoritmos creados para este fin.

Ordenamiento ascendentey descendente:Alfabético,numérico.


A continuación se muestra una lista y las diferentes maneras de ordenarla:

12
11
1
100
Lista sin ordenar 22
232
2
30
7
9
1
100
11
12
Lista ordenada alfabéticamente de manera ascendente. 2
22
232
30
7
9
9
7
30
232
Lista ordenada alfabéticamente de manera descendente. 22
2
12
11
100
1
1
2
7
9
11
Lista ordenada numérica de manera ascendente. 12
22
30
100
232
232
100
30
22
12
Lista ordenada numérica de manera descendente. 11
9
7
2
1
En muchos casos se requiere el ordenamiento de los elementos de una lista. Este
ordenamiento se obtiene asignándole a la propiedad sorted en True, como se
muestra:
ListBoxl.Sorted = True
El ordenamiento de la lista en este caso es alfabético ascendente. Para otros casos
como se muestra en la tabla anterior, se requiere el uso de algoritmos de
ordenamiento que contemplen cada caso.

Actividad 2. Crear una aplicación para el ordenamiento de


elementos en una lista
Objetivo
Aplicar y comprender los algoritmos de ordenamiento asociados a listas.

Procedimiento:

1. Crear la siguiente interfase:

Agreg.ar

I· Elige el ordenamiento · 3
Ordena I

2. Considerar para la propiedad Ítems del Comboñoxl las siguientes


opciones::

Editor de la colección Cadena 11]1:RJ


Escriba las cadenas en la colección (una por línea):
Orden alfabético ascendente
Orden alfabético descendente
Orden numérico ascendente
Orden numérico descendente

I Aceptar Cancelar
3. Codificar como se muestra:

Public Class Forml

Private Sub BtnAgregar_Click{ByVal sender As


System.Object, ByVal e As System.EventArgs) Handles
BtnAgregar.Click
If TextBoxl.Textl.ength = O Then
MsgBox("Escriba un valor en el cuadro de texto'")
Else
ListBoxl.Items . .Add{TextBoxl.Text)
TextBoxl . Text = ""
TextBoxl.Focus()
End If
End Sub

Private Sub BtnOrdenar _Click {ByVal sender As System. Cbject,


ByVal e As System.EventArgs) Handles BtnOrdenar.Click
Dim i As Int16, j As Int16
Dim Aux As String, Cond As Boolean
For i = O To ListBoxl.Items.Count - 2
For j = i + 1 To ListBoxl.Items.Count - 1
Select Case Val (ComboBoxl .Selectedindex)
Case o
Cond = ListBaKl.Iterrs{i) > Li.stBoxl.Items{j)
Case 1
Cond = ListBaKl. Iterrs {i) < Li.stBoxl. Items {j)
Case 2
O:md= Val (ListBoxl. Itans (i) ) > Val (ListBoxl. Itars (j) )
Case 3
0:nd = Val (ListBoxl. Itans (i) ) < Val (ListBoxl. Itans (j) )
Case Else
MsgBox{"Elegir una cpción de ordenaniento")
End Select
If Cond Then
Aux = ListBoxl.Items{i)
ListBoxl. Items (i) = ListBoxl. Items (j)
ListBoxl. Items {j) = Aux
End If
Next
Next
End Sub

End Class
Operaciones de manejo y desplazamiento de elementos en la lista
programando con teclas
En este ejemplo revisaremos como combinar el trabajo de listas con el manejo de
eventos para el control de las teclas.

Actividad 3. Crear una aplicación para el manejo de una lista con


teclas
Objetivo
Aplicar y comprender los algoritmos para el manejo de una lista con
teclas.

Procedimiento:

1. Crear la siguiente interfase:

Datos Numericos:

2. Codificar como se muestra:


Public Class Forml
Private Sub Txtlatos_KeyPress (ByVal sender As Cbject, ByVal
e As System.Windows.Forms.KeyPressEventArgs) Handles
'IxtDatos.KeyPress
Dim K As Int16 = Asc(e.KeyChar)
If (K < 47 Or K > 58) And K <> 8 And K <> 13 Then
e.Handled = True
Exit Sub
End If

If K = 13 And TxtDatos.Text.Length > O Then


LstDatos.Items . .Add(TxtDatos.Text)
TxtDatos. Clear ()
TxtDatos. Focus ()
End If
End Sub
Private Sub LstDatos_KeyPress(ByVal sender As Cbject, ByVal
e As System. Windows. Forms. KeyPressEventArgs) Handles
Lstoatos.KeyPress
Dim Dato As String
Dim K As Intl6 = Asc(e.KeyChar)
If K = 13 Then
Dato = InputBox ("M:>difica Datos:")
If IsNumeric(Dato) Then
Me. Lst.Datos. Item.s (Me. Lst.Datos. Selectedindex) = Dato
End If
End If
End Sub

Private Sub Lstoatos_KeyDown(ByVal sender As Cbject, ByVal


e As System.Wincbws.Forms.KeyEventArgs) Handles
Lstoatos.KeyDown
Dim Fila As Integer, Dato As String
Fila= LstDatos.Selectedindex
If Fila <> -1 Then Dato = Lstoatos. Item.s (Fila)
I f e . KeyO:>de = 4 6 Then ' Suprimir
If Fila <> -1 Then LstDatos. Item.s. RemOlleAt (Fila)
End If
If e.KeyCode = 40 And e.Shift = True Then 'Abajo
If Fila< Lstoatos.Items.Count - 1 Then
Lstoatos.Iterns(Fila) = LstDatos.Items(Fila + 1)
Lstoatos.Items(Fila + 1) = Dato
End If
End If
If e.KeyCode = 38 And e.Shift = True Then 'Arriba
If Fila> O Then
Lstoatos.Items(Fila) = LstDatos.Items(Fila - 1)
Lstoatos.Items(Fila - 1) = Dato
End If
End If
'Flechas Der(37) Izq(39)
End Sub

Private Sub LstDatos_SelectedindexChanged(ByVal sender As


System.Object, ByVal e As System.EvE:!"ltArgs) Handles
LstDatos.SelectedindexChanged
Txtoatos.Text = LstDatos.Selecteditem
End Sub

End Class
Listas multicolumna

El listBox tiene una propiedad que permite que los datos se muestren en múltiples
columnas. Como se muestra en el ejemplo:
234 343 4534
354 434 345
678 534 333
564 456 54
575 5675 234
87 675 654
756 45 3452
445 3456 53
34 3 43

Las propiedades a considerar en este caso son:


ListBox1. MultiColunm = True
ListBoxl.ColumnWidth = SO

El MultiColum en True habilita la opción, mientras que el ColumnWidth indica el


ancho en píxeles a considerar para cada columna de la lista.

Cálculoautomático del ancho


El ancho apropiado a considerar para una lista multicolumna no es fácil de definir,
de allf que podemos crear una función para buscar el ancho apropiado
considerando el mayor espacio ocupado por alguno de los elementos de la lista y
tomar este como referencia. Para esto consideraremos la siguiente función:

Private Function Anchd::olum(ByVal Lista As ListBox) As Intl6


Dim i As Intl6, Ancho As Intl6, MayAncho As Intl6 = O
For i = O To Lista.Items.Count - 1
An::ho = Val(Lista.CreateGraphics _
().MeasureString(Lista.Items(i) .ToString(),
Lista.Font) .Width)
If MayAncho < Ancho Then MayAncho = Ancho
Next
Return MayAncho
End Function

Esta función a partir de la librería gráfica se toma el mayor ancho y lo retorna para
ser empleado como para la columna de la lista.

Luego función puede ser llamada directamente para ser asignada a la propiedad y
requiere como argumento la lista que será tomada en cuenta para el cálculo del
ancho. El llamado a esta es como se muestra a continuación:

ListBox1.Columnfilidth = AnchoColum(ListEox1)
Listas multiselección
Una lista multiselección es aquella que permite que muchos elementos puedan ser
seleccionados simultáneamente., como se muestra:

Modos de selección múltiple


Se tienen cuatro modos de selección en un ListBox. Como se muestra en las
propiedades de una lista:
~~~~~~~~~~~~~~~~~
Propiedades ~
ListBox 1 System.Windows.Forms.listBox T

Select,onMode One
IE Si2e
Sorted
rebtndex
TabStop MultiExtericlecl

• None: Cuando no se podrán seleccionar elementos en la lista.


• One: Es la opción por defecto. Permite la selección de un solo
elemento.
• MultiSimple: Permite selección múltiple con solo un clic.
• MultiExtended: Para marcar varios elementos emplear Ctrl o Shift.

Métodos y propiedades de selección.


Para la multiselección se deben tener en cuenta el método GetSelected y
SetSelected. El primero permite saber si un determinado elemento esta
seleccionado, y el segundo selecciona o deselecciona el elementos en la lista.

Por ejemplo, para saber si un elemento con índice x se encuentra seleccionado se


considera el código siguiente:

ListBoxl.GetSelected(x)

Si el valor de retomo de este método es True esta seleccionado y si no lo


contrario.
Por ejemplo para seleccionar un elemento en el índice x, se fija con el siguiente
código:
ListBoxl.SetSelected(x, True)

Para desmarcar, en lugar de True se coloca Fa/se.

Actividad 4. Crear una aplicación para el manejo de una lista


multiselección.
Objetivo
Aplicar y comprender los algoritmos para el manejo de una lista
multiselección.

Procedimiento:

1. Crear la siguiente interfase:


-
[11 Lista Multiselección ~@LR!

Agrega Invertir Eliminar Most1a1


ltems Selección Seleccionados Seleccionados

2. Codificar como se muestra:


Public Class Forml
Private Sub Buttonl_Click_l (ByVal sender As System.Cbject,
ByVale As System.EventArgs) Handles Buttonl.Click
'Agrega Elementos
Dim i As Int16
For i = 1 To 8
Me. ListBoxl. Items .Add( "Item " & i. ToString)
Next
End Sub
Private Sub Button2_Click(ByVal sender As System.<l:>ject,
ByVal e As System.EventArgs) Handles Button2.Click
'Invertir Seleccion
Dim x As Integer
For x = O To ListBoxl.Items.Count - 1
ListBoxl.SetSelected(x, Not ListBoxl. GetSelected(x))
Next
End Sub

Private Sub Button3_Click(ByVal sender As System.<l:>ject,


ByVal e As System.EventArgs) Handles Button3.Click
'Eliminar
Dim x As Integer = ListBoxl.Items.Count - 1
While (x >= O)
If ListBoxl. GetSelected (x) Then
ListBoxl.Items.RemoveAt(x)
End If
X-= 1
End Whi.le
End Sub

Private Sub Button4_Click(ByVal sender As System.<l:>ject,


ByVal e As System.EventArgs) Handles Button4.Click
'Listar en un MsgBox
Dim x As Integer, Men As String = ""
For x = O To ListBoxl.Items.Count - 1
If ListBoxl.GetSelected(x) = True Then
~n &= Me.ListBoxl.Items(x) & Chr(l3)
End If
Next
MsgBox(Men)
End Sub

End Class
Preguntas de repaso

1. Crear una aplicación que permita administrar una competencia de autos.


Considerar la siguiente interfase:

Caminos del lnc.a. rg)


Compelincia: j<Elige uno>

NÍlmero: Participante:

Descalificados:
................................................................................ ,

«
Eliminar

Result&dos Salir

El ComboBox contiene los siguientes diferentes tipos de competencia, una


vez elegido este, se coloca como parte del título luego de "Caminos del
Inca":

El número y el nombre del participante se agregan por teclado con un


ENTER a la primera lista, debe validarse de tal forma que no permita
números duplicados.

Los botones de comandos !\ y V permiten desplazar la posición de un


elemento seleccionado en la primera lista, para cambiar el orden en que se
encuentran.

Los botones>> y<< permiten desplazar los datos de un participante de la


primera lista a la segunda y viceversa.

El botón eliminar, permite borrar datos de la segunda lista de


descalificados.
Un ejemplo para la ejecución con algunos datos se muestra a continuación:

. - Caminos del lnc.a. - Campeonato L8J


Competincia: I Campeonato
Ni:.me10: Participante:

Descalificados:
12 Jo1ge 32 Eduerdo
16 Ca1los 11 'Walle1
22 Mal'\uel
99 Luis
23 Felipe
))

«
1 (.Eliminar
,
:!
..

Resultactc.s Salir

Si se presiona. el botón de comandos para ver los resultados, se obtienen


los 3 primeros puestos en un cuadro de mensaje:

Competencia L8J
I o Puesto : 12 Jorge
zo Puesto : 16 Carlos
30 Puesto : 22 Manuel

Aceptar I
La salida es controlada y se muestra un cuadro de dialogo de confirmación
si se intenta esta acción:

Competencia l'Jfl
'-,V ;salir?

Sí No

Validar el TextBox de Número, para que solo permita este tipo de datos y
con 2 cifras.

También podría gustarte