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
 

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

Preguntas similares