EVENTOS EM VARIAS TEXTBOX CRIADAS EM RUNTIME

WILMADMAX 29/08/2012 20:48:01
#408886
ola pessoal
estou tentando desenvolver um formulario padrão de cadastros de tabelas, a premissa é criar um form com datagridview mais as textbox correspondentes aos campos da tabela que estou consultado, isto fiz sem problemas, mas minha questão é como capturar os eventos das textbox criadas, exemplo
tenho no meu form padrão:
Public WithEvents TxtBoxCad As New TextBox
que cria a textbox, pois preciso dos eventos delas
depois para crialas tenho:
While ReaderCFG.Read()
TxtBoxCad = New TextBox
With TxtBoxCad
.Name = ReaderCFG.Item(2).ToString [ô]cadcfg NomCam
.MaxLength = ReaderCFG.Item(6) [ô]cadcfg TamCam
.Top = intPosCampo
.Left = 100
.DataBindings.Add([Ô]Text[Ô], DG.DataSource, ReaderCFG.Item(2).ToString)
End With
ou seja crio uma textbox para cada campo que possuir na tabela, e como disse funciona legal
porem não consigo capturar os eventos de lostfocus delas por exemplo, ele só me mostra o lostfocus da ultima textbox criada como no codigo abaixo, o que pode estar ocorrendo?

Private Sub TxtBoxCad_LostFocus(sender As Object, e As System.EventArgs) Handles TxtBoxCad.LostFocus
MsgBox(TxtBoxCad.Name)
End Sub
JABA 29/08/2012 23:34:37
#408913
Resposta escolhida
Você terá que usar Delegates para isso.

While ReaderCFG.Read()
TxtBoxCad = New TextBox
With TxtBoxCad
.Name = ReaderCFG.Item(2).ToString [ô]cadcfg NomCam
.MaxLength = ReaderCFG.Item(6) [ô]cadcfg TamCam
.Top = intPosCampo
.Left = 100
.DataBindings.Add([Ô]Text[Ô], DG.DataSource, ReaderCFG.Item(2).ToString)

[ô]Coloque isso para adicionar os eventos
AddHandler TxtBoxCad.LostFocus, AddressOf TxtBoxCad_LostFocus
End With
end While

[ô]Não precisa mais ter o Handles declarado no final do metodo.
[ô]Todos os eventos de LostFocus para o controle TxtBoxCad serão executados. Basta você colocar um if para pegar aquele que deseja.
Private Sub TxtBoxCad_LostFocus(sender As Object, e As System.EventArgs)

[ô]Se retirar o ifm eu acho que vai mostrar o nome de todos os controles TxtBoxCad
if sender.Name = [Ô]cadcfg[Ô]
MsgBox(TxtBoxCad.Name)
end if
End Sub

vlw

WILMADMAX 30/08/2012 13:55:43
#408948
valeu, funcionou, era ate mais simples do que imaginava, é meu primeiro projeto em OOP, e estou apanhando,
JABA 30/08/2012 17:15:48
#408965
Se quiser retirar o evento de um controle apenas, uitlize o RemoveHandle.

Não esqueça de fechar o topico e pontuar quem lhe ajudou.

vlw
Tópico encerrado , respostas não são mais permitidas