CLR: .Net / Mono / Boo / Otros CLR > VB .NET
Ciclo en un textbox??
(1/1)
hacker225:
hacer un ciclo para validar 49 textbox
lo que pienso hacer es algo mas o menos asi
--- Código: Text ---Public Class Form1 Dim i As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For i = 0 To 48 Me.TextBox(i).Text = "hola" Next End SubEnd Class
pero sale error en el Me.TextBox(i).Text = "hola"
alguna idea de como hacerlo
ElNapster:
pero si tenes un arreglo de textbox ? o solo textbox1,textbox2,textbox3....textbox59 porque tendrian que estar textbox1(0),textbox1(1),textbox1(2)...textbox1(59)
:comp:
Nebire:
--- Cita de: "hacker225" ---
--- Código: Visual Basic ---Public Class Form1 Dim i As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For i = 0 To 48 Me.TextBox(i).Text = "hola" Next End SubEnd Class
--- Fin de la cita ---
Como te dice elNapster si ya tienes los controles metidos en un array te debería funcionar. En vb2005 se han eliminado los arrays ya que chocan frontalmente con el modelo de objetos, no obstante por compatibilidad hacia atrás se incluye y por tanto es posible, como describirlo es un poco engorroso te animo a que tu mismo lo veas, crea un proyecto en VB.60 añade al formulario un array de controles textbox guarda el proyecto y cuierra vb6 ahora abre el proyecto en vb2005 te pedirá ai deseas 'actualizar' el proyecto, respondes que si y listo como sólo tenías esos objetos sin nada más ni código te será fácil ver como se hace para ello tienes que abrir el 'diseñador' del formulario (dale a mostrar todos los archivos para que lo encuentres fácilmente)...
Hay aparte otros 2 métodos igual de sencillos y más asequible de explicar en 4 líneas de código..
El 1º consiste en chequear en todos los controles del formulario si es el texbox deseado... de entrada si tienes pongamos 100 textbox usando la propiedad NAME a los que interese llámalos semejante por ejemplo TextCuenta1, textCuenta2... Textcuenta25... y a otros textbox que no entren en esa línea llámales de forma distinta.. el código sería algo como:
--- Código: Visual Basic --- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click msgbox " Se hallaron " & Escribe_Textbox & " textbox con el nombre 'textcuenta'. " End sub private function Escribe_Textbox() as integer dim x as integer for each c as control in Controls ' recorre todos los controles en el formulario if c is TextBox then ' filtramos los que no son textbox if instr(c.name.tolower,"textcuenta")> 0 then ' filtramos los textbox cuyo patrón (el nombre) no nos interesa, esto debe meditarse antes, o usar otra propiedad..... c.text="Hola cocacola" ' hacemos lo que querías.... x +=1 end if end if next return x end function
El 2º método es muy parecido a éste, y su cometido es evitar recorrer todos los controles del formulario CADA VEZ que deseamos rescribirlos, esto es si tenemos 25 textbox y hay 30 controles en el formulario pués no tiene mucha importancia, pero si tenemos 8 textbox y hay 300 controles en el formulario, pués implica pérdida de tiempo. Para ello lo que hacemos es buscarlos una sóla vez y meterlos en un 'saco', luego cuando queramos escribirlos, vamos al saco y de uno en uno los sacmos y escribimos.... el código sería más o menos
--- Código: Visual Basic --- ' estamod dentro del formulario... dim TB as new arraylist ' dentro del evento load del formulario call Ensacar_Textbox ' el código se mete en una rutina por si necesitamos actualizar la lista que tenemos dentro del saco, eso ocurrirá si eliminamos o deseamos añadir nuevos objetos... ' esta rutina es casi idéntica a la mostrada en el ejemplo anterior, private sub Ensacar_Textbox() dim x as integer for each c as control in Controls ' recorre todos los controles en el formulario if c is TextBox then ' filtramos los que no son textbox if instr(c.name.tolower,"textcuenta")> 0 then ' filtramos los textbox cuyo patrón (el nombre) no nos interesa, esto debe meditarse antes, o usar otra propiedad..... TB.add( c) ' abrimos el saco y lo metemos .... end if end if next end sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click call Escribir_Texto("Hola cocacola") end sub private sub Escribir_Texto(cadena as string) dim nTb as new textbox for k as integer= 0 to TB.count -1 ' contamos los que tenemos en el saco.... esos mismos son los que vamos a 'escribir' nTb=TB.item(k) ntb.text= cadena next end sub
listo... ya sólo te queda meter un montón de controles textbbox de nombre (textcuenta, o el que quieras pero adecúalo en el código) otros texbos de otro nombre diferente y otros objetos (botones, label, frame, picture...) para comprobar que funciona perfectamente.
Saludos....
hacker225:
Bueno lo solucione con esto
--- Código: Text --- Dim i As IntegerDim n As Integer = 10 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For i = 0 To 48 Dim txt As New TextBox txt.Text = "TextBox" & i txt.Location = New Point(90, n) Controls.Add(txt) n = n + 25 Next End Sub
Gracias a todos
Navegación
Ir a la versión completa