SAIR DE UMA ROTINA
Pessoal, tenho essa rotina:
Private Sub TargetBox_Validate(Cancel As Boolean)
If Mid(TargetBox.Name, 6, 1) = [Ô]C[Ô] Then
If TargetBox.Text = Empty And TargetTextBoxTag = [Ô][Ô] Then
TargetTextBoxTag = TargetBox.Name
MsgBox [Ô]é necessário informar a quantidade![Ô], vbCritical, [Ô]Erro de digitação[Ô]
Cancel = True
TargetBox.Text = [Ô][Ô]
TargetBox.SelStart = 0
TargetBox.SelLength = Len(TargetBox.Text)
Else
TargetTextBoxTag = [Ô][Ô]
End If
Else
TargetTextBoxTag = [Ô][Ô]
End If
end sub
acontece o seguinte, se eu aperto o botão (Sair) a MsgBox aparece. Alguem tem uma ideia para contorner isso, ou seja, cancelar a rotina sempre que um determinado botão for acionado?
Private Sub TargetBox_Validate(Cancel As Boolean)
If Mid(TargetBox.Name, 6, 1) = [Ô]C[Ô] Then
If TargetBox.Text = Empty And TargetTextBoxTag = [Ô][Ô] Then
TargetTextBoxTag = TargetBox.Name
MsgBox [Ô]é necessário informar a quantidade![Ô], vbCritical, [Ô]Erro de digitação[Ô]
Cancel = True
TargetBox.Text = [Ô][Ô]
TargetBox.SelStart = 0
TargetBox.SelLength = Len(TargetBox.Text)
Else
TargetTextBoxTag = [Ô][Ô]
End If
Else
TargetTextBoxTag = [Ô][Ô]
End If
end sub
acontece o seguinte, se eu aperto o botão (Sair) a MsgBox aparece. Alguem tem uma ideia para contorner isso, ou seja, cancelar a rotina sempre que um determinado botão for acionado?
Primeiro o que vem a ser esta targetbox, éj um objeto?
outra coisa isto está certo = [Ô]TargetTextBoxTag [Ô]
não seria
outra coisa isto está certo = [Ô]TargetTextBoxTag [Ô]
não seria
TargetTextBox.Tag
Marcelo, TargetBox é sim um objeto e criado dinamicamente e o código esta em um modulo class.
TargetTextBoxTag é uma variavel string onde guardo o nome do objeto.
TargetTextBoxTag é uma variavel string onde guardo o nome do objeto.
eu nà o cosegui simular o erro que vc diz
Infelizmente, o método [Ô]validate[Ô] é acionado antes do foco passar para o botão [Ô]cancelar[Ô]. Portanto, acho que não tem como você cancelar a chamada dele. Você terá que adaptar o código para validar em outro momento.
Se você realmente não encontrar outra maneira, existe uma gambiarra master nivel 3.
No [Ô]mouse move[Ô] do botão de cancelar, você cancela a propriedade [Ô]validate[Ô]. E, no mesmo evento do Form, vc ativa ela.
[txt-color=#e80000]Defeitos:[/txt-color]
-Usuário usar o botão via teclado
+Basta colocar o mesmo código no [Ô]Got Focus[Ô] do botão
-Usuário clicar muito rápido, antes do evento [Ô]Mouse move[Ô] ser ativado
+Não consegui pensar em uma solução para isso
No [Ô]mouse move[Ô] do botão de cancelar, você cancela a propriedade [Ô]validate[Ô]. E, no mesmo evento do Form, vc ativa ela.
[txt-color=#e80000]Defeitos:[/txt-color]
-Usuário usar o botão via teclado
+Basta colocar o mesmo código no [Ô]Got Focus[Ô] do botão
-Usuário clicar muito rápido, antes do evento [Ô]Mouse move[Ô] ser ativado
+Não consegui pensar em uma solução para isso
Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.CausesValidation = False
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.CausesValidation = True
End Sub
Private Sub Text1_Validate(Cancel As Boolean)
If Text1.Text <> [Ô]lol[Ô] Then
MsgBox ([Ô]Errado[Ô])
Text1.SetFocus
End If
End Sub
Montei um exemplo. Acione o botão (Sair), tem que fechar o form, não pode dar a msg. é isso que eu pretendo e não consigo fazer.
A gambiarra top ficaria assim
Private Sub Command1_Click()
Unload Me
End Sub
Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.CausesValidation = False
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.CausesValidation = True
End Sub
Private Sub Text1_Validate(Cancel As Boolean)
[ô]
If Not Text1.CausesValidation Then Exit Sub
[ô]
If Text1.Text = Empty Or Text1 = [Ô][Ô] Then
MsgBox [Ô]é necessário informar o centro de custo![Ô], vbCritical, [Ô]Erro de digitação[Ô]
Cancel = True
Text1.Text = [Ô][Ô]
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End If
End Sub
Citação::
Montei um exemplo. Acione o botão (Sair), tem que fechar o form, não pode dar a msg. é isso que eu pretendo e não consigo fazer.
Irtenko, boa tarde...
No seu sistema tem a oção de botõses do tipo confirmar (Novo registro ou Edição) e cancelar ação????
Se não tver passe a adotar este sistema e dai você faz as verificações no botão confirmar, e caso o usuario clicar em cancelar, você encerra o form sem problemas....
Isto não vai te deixar amarrado em verificações se saida....
Abraços....
ASHKATCHUP, sua cambiarra é muito boa, mas tenho que dar atenção a suas observações:
Citação:Defeitos:
-Usuário usar o botão via teclado
+Basta colocar o mesmo código no [Ô]Got Focus[Ô] do botão
-Usuário clicar muito rápido, antes do evento [Ô]Mouse move[Ô] ser ativado
+Não consegui pensar em uma solução para isso
DANIKULL, vou avaliar sua sugestão.
Irenko:
Como eu falei, é uma gambiarra de alto risco. Com certeza, a melhor solução é a do Danikull. Porém, as vezes, não podemos alterar toda a tela. Foi por isso que indiquei a gambiarra.
Boa sorte no projeto.
Como eu falei, é uma gambiarra de alto risco. Com certeza, a melhor solução é a do Danikull. Porém, as vezes, não podemos alterar toda a tela. Foi por isso que indiquei a gambiarra.
Boa sorte no projeto.
Tópico encerrado , respostas não são mais permitidas