FECHAMENTO DO FORM INCORRETO
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.
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.
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
Valeu, colega, agora funcionou certinho.
Só não entendi por que não funciona no Case, mas tudo bem, o importante é funiconar.
Até mais.
Só não entendi por que não funciona no Case, mas tudo bem, o importante é funiconar.
Até mais.
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:
No teu código, tu colocou uma EXPRESSÃO no Case e não um valor.
O visual studio vai analisar a expressão por partes:
Na sequencia, vai analisar o resto da expressão. A constante [Ô]Keys.F4[Ô] corresponde ao numero 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:
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
Cara, valeu pela explicação.
Valeu mesmo!!!
Muito obrigado, me ajudou muito.
Até mais.
Valeu mesmo!!!
Muito obrigado, me ajudou muito.
Até mais.
Mestre, se a dúvida foi resolvida, finaliza o tópico, pro forum ficar organizado.
Abraço
Abraço
Tópico encerrado , respostas não são mais permitidas