Visual Basic.NET - Aplicacion Con Listbox

 
Vista:

Aplicacion Con Listbox

Publicado por SweeTy (12 intervenciones) el 06/05/2010 13:50:28
Buenos Dias,

He creado una aplicacion en la cual, yo le indico en un textbox un numero, y en otro textbox le indico los digito en total que tiene que tener. Es decir si por ejemplo en el text1 pongo 54 y en el text2 pongo 3, el text3 asume el texto 540 y el text4 asume el texto 549. La intencion
es que en un listbox aparezca la lista desde ese text3 y text4. Cuando el text 3 y el text4 asumen esos textos, hay unas variables que asumen la propiedad del texto del cada uno de ellos respectivamente, los he llamado lon1 y lon2.

Entonces he avanzado un poco con este tema. Os explico... igual hay una manera de "reducir" el codigo.
Lo que he hecho ha sido darle a un boton el codigo:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If TextBox2.Text = "" Then
MsgBox("Falta la longitud")
Exit Sub
End If
If Len(TextBox1.Text) = 1 Then
If TextBox2.Text <= 1 Then
MsgBox("Hay algo incorrecto" & vbCrLf & "La longitud no puede ser igual a los digitos del rango")
Exit Sub
End If
If TextBox2.Text = 2 Then
lon1 = (TextBox1.Text & "0")
lon2 = (TextBox1.Text & "9")
TextBox5.Text = "1"
End If
If TextBox2.Text = 3 Then
lon1 = (TextBox1.Text & "00")
lon2 = (TextBox1.Text & "99")
TextBox5.Text = "2"
End If
If TextBox2.Text = 4 Then
lon1 = (TextBox1.Text & "000")
lon2 = (TextBox1.Text & "999")
TextBox5.Text = "3"
End If
If TextBox2.Text = 5 Then
lon1 = (TextBox1.Text & "0000")
lon2 = (TextBox1.Text & "9999")
TextBox5.Text = "4"
End If
If TextBox2.Text = 6 Then
lon1 = (TextBox1.Text & "00000")
lon2 = (TextBox1.Text & "99999")
TextBox5.Text = "5"
End If
If TextBox2.Text = 7 Then
lon1 = (TextBox1.Text & "000000")
lon2 = (TextBox1.Text & "999999")
TextBox5.Text = "6"
End If
If TextBox2.Text = 8 Then
lon1 = (TextBox1.Text & "0000000")
lon2 = (TextBox1.Text & "9999999")
TextBox5.Text = "7"
End If
If TextBox2.Text = 9 Then
lon1 = (TextBox1.Text & "00000000")
lon2 = (TextBox1.Text & "99999999")
TextBox5.Text = "8"
End If [..]
asi hasta el 9.... (un poco cutre lo sé) el caso es que despues añado el codigo
TextBox3.Text = lon1
TextBox4.Text = lon2
Dim indice As Integer
Dim objItemsLista(lon2) As System.Object
For indice = lon1 To lon2
objItemsLista(indice) = indice
Next
ListBox1.Items.AddRange(objItemsLista)

TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""

Por que encontre un codigo que hacia exactamente lo que quiero, solo que en el ejemplo era del 0 al 11, y en el ejemplo en el list box se generaba un listado del 0 al 11, ambos incluidos. Y precisamente esa es la parte que me falla, al poner la aplicacion en marcha poner los datos en los textbox y hacer click en el boton me da un error en la linea 443 que es : "objItemsLista(indice) = indice". En el ejemplo original la linea es: "objItemsLista(i) = "Lista de numero" & indice. Como veis no cambia tanto...

De hecho el codigo en si no cambia nada por que lo unico que he hecho son estos cambios:

Dim i As Integer <===> Dim indice as integer
Dim objItemsLista(11) As System.Object <===> Dim objItemsLista(lon2) As System.Object
For indice = 0 to 11 <===> For indice = lon1 to lon2
objItemsLista(indice) = "Lista de numero" & indice <===> objItemsLista(indice) = indice
Next
ListBox1.Items.AddRange(objItemsLista) <===> ListBox1.Items.AddRange(objItemsLista)

El resultado me da un error que dice:
"Indice fuera de los limites de la matriz."

Y aparece la siguiente excepcion.

************** Texto de la excepción **************
System.IndexOutOfRangeException: Índice fuera de los límites de la matriz.
en RANGOS.DeSaEx.Button1_Click(Object sender, EventArgs e) en S:\Mis Documentos\Tramitaciones\Despeine\RANGOS\RANGOS\DeSaEx.vb:línea 443
en System.Windows.Forms.Control.OnClick(EventArgs e)
en System.Windows.Forms.Button.OnClick(EventArgs e)
en System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
en System.Windows.Forms.Control.WndProc(Message& m)
en System.Windows.Forms.ButtonBase.WndProc(Message& m)
en System.Windows.Forms.Button.WndProc(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
en System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Yo entiendo que hay algo aqui:

objItemsLista(indice) = indice

Que falla... pero no se que es.
Teneis idea de lo que puede estar pasando?

Gracias. Yo por mi parte sigo investigando.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder