METODO CHAGE EM TODOS OBJETOS DO FORM
Olá,
Estou com a seguinte dúvida:
Tenho um form com vários objetos (textbox, combobox, etc) e gostaria que toda vez que fosse executado o método OnChange de qualquer objeto, acionasse uma determinada função.
Claro que poderia simplemente adicionar o método OnChage de cada um deles... Mas aà é que está o problema: o form possui muitos campos e provavelmente, eu terei que implementar isso não só em um form e sim na maioria deles (quase todo o sistema)...
Existe alguma maneira mais simples?
Estou com a seguinte dúvida:
Tenho um form com vários objetos (textbox, combobox, etc) e gostaria que toda vez que fosse executado o método OnChange de qualquer objeto, acionasse uma determinada função.
Claro que poderia simplemente adicionar o método OnChage de cada um deles... Mas aà é que está o problema: o form possui muitos campos e provavelmente, eu terei que implementar isso não só em um form e sim na maioria deles (quase todo o sistema)...
Existe alguma maneira mais simples?
bem...
até onde sei... tem que ser um por um. mas chame uma função, para facilitar a manutenção, se todos são exatamente iguais.
até onde sei... tem que ser um por um. mas chame uma função, para facilitar a manutenção, se todos são exatamente iguais.
Desculpem lá.
Como utilizo o metodo OnChange() e para que serve ???
Tks.
Como utilizo o metodo OnChange() e para que serve ???
Tks.
é muito simples, mas deve ser feito para cada tipo de controle.
Passando o exemplo para o textbox. Será nescessario incluir um Timer com tempo de intervalo 1 até 1000
Passando o exemplo para o textbox. Será nescessario incluir um Timer com tempo de intervalo 1 até 1000
Option Explicit
Dim WithEvents TextBoxAtual As TextBox
Private Sub Timer1_Timer()
On Error Resume Next
If TypeName(ActiveControl) = "TextBox" Then
If TextBoxAtual.Name <> ActiveControl.Name Then
Set TextBoxAtual = ActiveControl
End If
End If
erro:
End Sub
Private Sub TextBoxAtual_Change()
Dim Mensagem As String
Mensagem = "O controle " & TextBoxAtual.Name & " foi alterado." & vbCrLf
Mensagem = Mensagem & "para o valor " & TextBoxAtual.Text
MsgBox Mensagem
End Sub
Fiz de outra maneira. Mais ou menos da seguinte forma:
Onde "sGeraArrayObjs" gera uma lista com o nome dos objetos que foram alterados
Mas encontrei outro problema. Para objetos Combobox, CheckBox, OptionButtom funciona perfeitamente mas também tenho objetos do tipo Grid, Flexgrid, Spread...
Como poderia proceder?
Alguém tem alguma idéia?
Private WithEvents moTextBox As TextBox
Public Sub AttachTo(ByVal objAux As Object)
If TypeOf objAux Is TextBox Then
Set moTextBox = objAux
End If
End Sub
Private Sub moTextBox_Change()
Call sGeraArrayObjs(moTextBox.Name)
End Sub
Onde "sGeraArrayObjs" gera uma lista com o nome dos objetos que foram alterados
Mas encontrei outro problema. Para objetos Combobox, CheckBox, OptionButtom funciona perfeitamente mas também tenho objetos do tipo Grid, Flexgrid, Spread...
Como poderia proceder?
Alguém tem alguma idéia?
Obs: a sub "AttachTo", utilizo no load do Form para cada objeto do form, e dessa forma, como possuo mais de um textbox no mesmo form, o código acima funciona somente para o último textbox utilizado nessa função. E não queria chamar essa função no LostFocus de cada objeto.
Ou seja, teóricamente, teria que criar um Array de objetos, mas não estou sabendo como fazê-lo
Ou seja, teóricamente, teria que criar um Array de objetos, mas não estou sabendo como fazê-lo
Tópico encerrado , respostas não são mais permitidas