FECHAMENTO DO FORM INCORRETO

PERCIFILHO 15/07/2013 13:31:33
#426062
Olá, pessoal.
Há uns dias atrás enviei uma dúvida sobre como fechar o Formulário com Alt+F4, e o colega Adhel me explicou assim:

Private Sub CadastroClientes_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
Select Case e.KeyCode
Case (e.Alt = True And Keys.F4)
Me.Dispose()
Me.Close()
etc... etc...

Porém, percebi que quando eu digito em qualquer TextBox do formulário, o ponto do teclado numérico, o formulário se fecha sozinho.
Alguém já passou por isso e pode me ajudar?

Até mais.
ASHKATCHUP 16/07/2013 10:19:09
#426099
Resposta escolhida

Bom dia!

O teu código está com um erro de lógica.

Olha esta linha:


Case (e.Alt = True And Keys.F4)


Pela tua lógica, era para testar se o usuário apertou ALT+F4. Mas tu não pode fazer isso na mesma linha.
O correto seria testar [Ô]case Keys.f4[Ô] e EMBAIXO testar o Alt.

Para facilitar, sugiro utilizar um [Ô]IF[Ô] ao invez do CAse:


If (e.Keycode = Keys.F4 And e.Alt)
Me.Dispose()
Me.Close()
End If


PERCIFILHO 16/07/2013 10:53:26
#426106
Valeu, colega, agora funcionou certinho.
Só não entendi por que não funciona no Case, mas tudo bem, o importante é funiconar.

Até mais.
ASHKATCHUP 16/07/2013 11:00:45
#426107
Na verdade, o Case funcionaria, mas tu tem que arrumar ele.

Pensa comigo: o Case testa se a variavel informada corresponde a um dos valores listados.

Exemplo:


Select Case X
Case 1
Case 2
Case 3
End select


No teu código, tu colocou uma EXPRESSÃO no Case e não um valor.

Case (e.Alt = True And Keys.F4)


O visual studio vai analisar a expressão por partes:


(e.Alt = True) ==> True


Na sequencia, vai analisar o resto da expressão. A constante [Ô]Keys.F4[Ô] corresponde ao numero 115.


(True and 115)


E isso resultará em TRUE

Então, no case, ele SEMPRE vai entrar nessa opção, pois o resultado sempre é true.


O correto seria fazer:


Select Case e.KeyCode
Case Keys.F4
If (e.Alt = True) Then
Me.Dispose()
Me.Close()
Endif
End select

PERCIFILHO 16/07/2013 12:34:28
#426118
Cara, valeu pela explicação.
Valeu mesmo!!!
Muito obrigado, me ajudou muito.

Até mais.
ASHKATCHUP 16/07/2013 15:00:06
#426133
Mestre, se a dúvida foi resolvida, finaliza o tópico, pro forum ficar organizado.

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