Verificar Evento de un Arrays de Texto

10/04/2010 - 16:04 por SysEdw | Informe spam
Hola Comunidad aqui intentando con este dolor de cabeza, bueno tengo este
arrays (codigo abajo) que me permite crear n label como Textbox, lo crea con
total normalidad, pero el problema que tengo es una vez creado el arrays como
lo verifico q texto es el que esta realizando el evento TextChanged o en que
texto esta el foco (GotFocus)
Gracias de ntemano su respuesta.



Private labelCampos() As Label
Private txtCampos() As TextBox
Public Sub CrearCampos(ByVal cols As Integer)
Dim k, a As Integer
Try
For Each con As Control In Me.txtCampos
Me.Controls.Remove(con)
Next
For Each con As Control In Me.labelCampos
Me.Controls.Remove(con)
Next
If cols = 0 Then Exit Sub
Catch ex As Exception
End Try
ReDim labelCampos(cols - 1)
ReDim txtCampos(cols - 1)
k = 0
For i As Integer = 0 To cols - 1
If i >= 0 Then
labelCampos(i) = New Label
txtCampos(i) = New TextBox
k += 1
labelCampos(i).TabIndex = k
k += 1
txtCampos(i).TabIndex = k
labelCampos(i).Name = "LabelCampo_" & i.ToString()
txtCampos(i).Name = "txtCampo_" & i.ToString()
txtCampos(i).Size = New System.Drawing.Size(150, 20)
If i = 0 Then
Me.labelCampos(i).Location = New System.Drawing.Point(7,
27)
Me.txtCampos(i).Location = New System.Drawing.Point(7, 41)
Else
txtCampos(i).Location = txtCampos(i - 1).Location
labelCampos(i).Location = labelCampos(i - 1).Location
labelCampos(i).Left += 150
txtCampos(i).Left += 150
End If
Me.Controls.Add(txtCampos(i))
Me.Controls.Add(labelCampos(i))
End If
a = i
Next
Me.txtCampos(a).Focus()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
CrearCampos(2)
End Sub

Preguntas similare

Leer las respuestas

#1 Leandro Tuttini
10/04/2010 - 18:19 | Informe spam
hola

no se si has verificado que los eventos tienen un parametro de nombre
sender, bueno en este esta la clave para detectar quien lanza el
evento

TextChanged
http://msdn.microsoft.com/es-es/lib...extchanged(VS.80).aspx

comov eras la firma del evento es:

Private Sub textbox_TextChanged(sender As Object, e As EventArgs)

Dim text As TextBox = CType(sender, TextBox)

End Sub

en este ejemploveras como casteas el sender que es un objet a TextBox,
y es este el que lanza el evento

tambien veo que cuando armas los controls dinamicao no estas asignando
los handler a los eventos

AddHandler y RemoveHandler
http://msdn.microsoft.com/es-es/library/6yyk8z93(VS.80).aspx

en tu caso deberias agregar

AddHandler txtCampos(i).TextChanged, AddressOf Me.textbox_TextChanged

de esta forma atachar cada textbox que creas dinamicamente al metodo
del evento, todos lanzaran el mismo codigo

- despues una consulta, por alguna razon no has suado una lista
generica, son mucho ams simpes de usar que los array, ademas veo que
agregas los controles al formualrio, entocnes no necesitas de un array
o lista

- el control Label no necesita de un TabIndex, ya que este no toma
foco como control, el tabindex define como te moveras por lo controles
al presionar el tab, pero si el control no toma foco no es necesario
definirlo


revise el codigo y lo adapte como lo haria, por ahi te de alguna idea,
analizalo por ahi te es util, al menso esta algo ams simple el codigo

Public Sub CrearCampos(ByVal cols As Integer)

Dim previousTextbox As TextBox
Dim previousLabel As label
Dim firstTextbox As TextBox

For i As Integer = 0 To cols - 1

Dim newLabel As New Label
Dim newTextbox As New TextBox

newTextbox.TabIndex = i

newLabel.Name = string.Format("LabelCampo_{0}", i)
newTextbox.Name =string.Format("txtCampo_{0}", i)

newTextbox.Size = New System.Drawing.Size(150, 20)

If i = 0 Then
newLabel.Location = New System.Drawing.Point(7,27)
newTextbox.Location = New System.Drawing.Point(7, 41)
firstTextbox = newTextbox
Else
newTextbox.Location = previousTextbox.Location
newTextbox.Left += 150
newLabel.Location = previousLabel.Location
newLabel.Left += 150
End If

AddHandler newTextbox.TextChanged, AddressOf Me.textbox_TextChanged

Me.Controls.Add(newTextbox)
Me.Controls.Add(newLabel)

previousTextbox = newTextbox
previousLabel = newLabel

Next

firstTextbox.Focus()

End Sub

Private Sub textbox_TextChanged(sender As Object, e As EventArgs)
Dim text As TextBox = CType(sender, TextBox)

End Sub


saludos
Respuesta Responder a este mensaje
#2 SysEdw
11/04/2010 - 03:16 | Informe spam
hola gracias por el dato
bueno sobre su pregunta Listas genericas
No he usado y la verdad no lo he visto tanto por eso trabajo con arrays solo
he escuchado lo mismo que Ud. dijo: son mucho mas simpes de usar que los
array, sino fuera molestia donde encontraria algunos manuales y ejmplo para
las Listas genericas, algo simple como para entenderla sin muchos conceptos
avanzados.
y ademas los textox que creo es de un comand_click
CrearCampos(me.txtCantidad.text)
y encaso sea cero se me borra todos los controlos que he creado anteriormente
Respuesta Responder a este mensaje
#3 Leandro Tuttini
11/04/2010 - 06:24 | Informe spam
hola

un buen luegar para encontrar informacion seria la documentacion del
msdn

List<(Of <(T>)>) (Clase)
http://msdn.microsoft.com/es-es/lib...2ey19.aspx

igualmente analiza el ejemplo como lo reformule, ya que en tu caso
creo que la lista o array esta de mas, si la diea es solo crear los
controles dinamicamente para agregarlo al formulario no hace falta
ponerlo en ninguna lista

saludos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida