Mientras estaba trabajando en una app me encontré de repente ante una situación que no esperaba, y es que un método que hasta el momento no había dado ningún atisbo de problema comenzó a lanzar un error del tipo OutOfBoundException
. Después de depurar por un tiempo, observé que el culpable de la situación no era otro sino la cantidad de elementos pasados en el array sobre el método AddRow
de una instancia del ListBox.
El problema viene determinado porque el método addRow espera un array cuyos elementos se correspondan a otras tantas columnas del ListBox. ¿Qué ocurre? Que si el ListBox solo tiene una columna y nuestro Array varias entradas (pocas), entonces se añadirá una fila en el ListBox pero no advertiremos ningún error:
MyListBoxInstance.AddRow( MyBigArray )
Ahora bien, cuando el Array propiamente dicho contiene una muy elevada cantidad de elementos es cuando nos encontramos con el problema; de modo que lo mejor para evitar estas situaciones consiste en iterar sobre el array añadiendo cada ítem a la instancia del ListBox, uno cada vez:
For each itemString as String in MyBigArray MyListBoxInstance.AddRow( itemString ) Next
Simplemente funciona tanto si el array contiene pocos elementos como si ha de lidiar con una gran cantidad de elementos. Por ejemplo, esta podría ser la situación que nos encontremos cuando trabajamos con cotenido descargado desde una API de Internet, cuando usamos un servicio web o bien tras una consulta a una base de datos.
Ahora bien, también podemos crear nuestra propia extensión de clase para añadir en un ListBox como nuevas filas todos los elementros pasados en un Array. Para ello, añade un nuevo método en un Módulo utilizando los siguientes datos:
- Method Name: addRows
- Parameters: Extends l as ListBox, ByRef data() as String
Y en el editor de código correspondiente sólo tenemos que introducir lo siguiente:
For Each item As String In data l.AddRow item Next
De este modo, ya podemos invocar el método desde cualquier ListBox de nuestro proyecto pasando el Array y obteniendo así unos resultados más limpios.