PROBLEMA ESQUISITO

JALEXM 02/05/2012 17:00:40
#401207
Olá.
Queria saber se é erro meu ou é um problema do VB.
Fiz o seguinte teste:
- Coloquei apenas dois TextBoxes num form e mais nenhum outro controle.
- No evento KeyPress de Text1 coloquei um comando simples: MsgBox [Ô]Olá[Ô].
- Rodei o programa e quando aperto TAB o foco muda de um para outro como esperado e fica nisso. Está OK.
- Porém, colcando False em Text2.Enabled, ao rodar o programa e apertar TAB, o evento KeyPress do Text1 é executado e a mensagem [Ô]Olá[Ô] aparece na tela.
Por que isso acontece? Na minha opinião, a tecla TAB não deveria ser capturada pelo evento KeyPress em nenhuma dessas situações.
Como resolver isso? Estou esquecendo de alguma coisa?

Obrigado.




PROGRAMADORVB6 02/05/2012 20:10:11
#401216
Olá.
é Lógico!! LOL!
- Vc reparou no valor do Tabindex para cada textbox??
- Caso vc tenha reparado o TabIndex dos controles são importantes..
ex: TextBox1.tabIndex=1 e o TextBox2.tabIndex=2
- Então Quando vc inibir o controle TextBox2.enabled=false o programa passa a ficar com um só controle activo: TextBox1.text (Para a máquina vc só colocou lá um controle)
- Resultado : Quando vc aperta a tecla Tab a textbox1 é quem recebe o foco uma vez que não existe + nhenhuma tabulação a efectuar e daí aparecer a mensagem que vc configurou para aquele controle.
- Para resolver o seu problema o colega ROBIU arranjou-lhe uma solução bastante boa.
Espero o ter ajudado.
Até+
Programadorvb6
ROBIU 02/05/2012 20:24:30
#401219
o evento KeyPress captura a tecla tab (retorna um 9). Teste assim no KeyPress da text1:
MsgBox KeyAscii


O que acontece é que o evento LostFocus ocorre antes do KeyPress quando Tab é pressionada. Como a tecla tab invoca o LostFocus o KeyPress é ignorado. Quando o Text2 está enable=false, o Tab não invoca o LostFocus e o KeyPress é acionado. Para resolver faça isso:

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 9 Then Exit Sub
MsgBox KeyAscii
End Sub

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