SAIR DE UMA ROTINA

IRENKO 10/02/2010 13:18:18
#334082
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?
MARCELO.TREZE 10/02/2010 13:32:27
#334084
Primeiro o que vem a ser esta targetbox, éj um objeto?

outra coisa isto está certo = [Ô]TargetTextBoxTag [Ô]

não seria

TargetTextBox.Tag 


IRENKO 10/02/2010 14:11:58
#334089
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.
MARCELO.TREZE 10/02/2010 14:23:26
#334091
eu nào cosegui simular o erro que vc diz
ASHKATCHUP 10/02/2010 14:37:47
#334092
Resposta escolhida
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.
ASHKATCHUP 10/02/2010 14:43:41
#334093
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



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


IRENKO 10/02/2010 15:07:39
#334098
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.

ASHKATCHUP 10/02/2010 15:15:21
#334101
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

DANIKULL 10/02/2010 15:27:41
#334104
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....
IRENKO 10/02/2010 15:50:57
#334107

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.
ASHKATCHUP 10/02/2010 15:56:15
#334108
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.
Tópico encerrado , respostas não são mais permitidas