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.
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
0