FOCO EM CONTROLE

USUARIO.EXCLUIDOS 25/04/2007 10:17:03
#213640
Pessoal, bom dia!!!
Preciso de uma rotina que forçe o foco de um controle permanecer nele caso seja detectado um erro qualquer.

Veja esta rotina abaixo, quando precionado F2 sobre o controle, me retorna a mensagem, mas pula para o outro controle quando perde o foco.

Private Sub txtCodOperador_Validate(Keepfocus As Boolean)
Select Case KeyCode
Case vbKeyF2
If txtCodOperador.text = "" Then
MsgBox "Operação não Permitida", VbInformation, Me.Caption
Else
Keepfocus = True
Exit Sub
End Select
End Sub


Marcelino Neto
VB6.0
Access2000
Dao
USUARIO.EXCLUIDOS 25/04/2007 10:27:11
#213641
Veja se dá certo.

Private Sub txtCodOperador_Validate(Keepfocus As Boolean)
Select Case KeyCode
Case vbKeyF2
If txtCodOperador.text = "" Then
MsgBox "Operação não Permitida", VbInformation, Me.Caption
Else
Keepfocus = True
txtCodOperador.SetFocus 'Acrescente esta linha
Exit Sub
End Select
End Sub

USUARIO.EXCLUIDOS 25/04/2007 10:39:54
#213646
Já tentei desta forma e continua mudando o foco.
USUARIO.EXCLUIDOS 25/04/2007 10:40:58
#213648
Resposta escolhida
MFERREIRANETO, como está dentro do método Validate, ele só sairá do controle se a operação for verdadeira, ou seja, o campo não esteja vazio, logo não precisa fazer um else, para verificar se é válido, basta colocar o KeepFocus conforme coloquei, ele automaticamente pulará para o campo subsequente caso preencha algo.

Private Sub txtCodOperador_Validate(Keepfocus As Boolean)
Select Case KeyCode
Case vbKeyF2
If txtCodOperador.text = "" Then
MsgBox "Operação não Permitida", VbInformation, Me.Caption
Keepfocus = True
End If
End Select
End Sub


USUARIO.EXCLUIDOS 25/04/2007 10:52:12
#213653
@PIOLHO, vc foi muito rápido cara, eu estava escrevendo o código igualzinho ao seu para o MFERREIRANETO da mesma forma que vc colocou, q exatamente, o que estava atrapalhando era o ELSE, pois no método validate do campo de texto só passa o foco adiante se caso a operação estiver ok ou verdadeira... caso contrario ele manterá o foco...

meu código fico assim:
Private Sub txtCodOperador_Validate(Keepfocus As Boolean)
Select Case KeyCode
Case vbKeyF2
If txtCodOperador.Text = "" Then
MsgBox "Operação não Permitida", vbInformation, Me.Caption
Keepfocus = True
End If
Exit Sub
End Select
End Sub



Mas como eu me atrasei pra escrever hehe
abraços
USUARIO.EXCLUIDOS 25/04/2007 11:40:32
#213675
Vou ser mai especifico, quando precionada a tecla F2 é aberto um form. para consulta de bairros, porém tem um controle (combo) que se o foco estiver sobre tal controle (combo) e precionado a tecla F2, o form. de consulta não pode ser aberto e retornado a mensagem de "Operação Inválida"

Já tentei de varios tipos.
keepfocus
Setfocus

mas sem sucesso, o form de consulta sempre é aberto, e me gera erro!!!

só tem que inibir o form de consulta!
USUARIO.EXCLUIDOS 25/04/2007 12:37:19
#213695
Bom MFERREIRANETO, a solução que eu acho que deve funcionar, mas você terá que adaptar a seu caso, eu testei aqui e funcionou.

Coloquei em um form, um campo text, e um combo, com o nome cmbBairros.

No evento Form_KeyDown, coloquei o seguinte critério:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyF2 Then
If Me.ActiveControl.Name <> "cmbBairros" Then
MsgBox "Voce pressionou F2", vbInformation, Me.Caption 'Quando f2 for pressionado, toque um Beep.
Beep
Form2.Show vbModal
End If
End If
End Sub


Com isso, você poderá abrir o form de Consulta a partir de qualquer campo com o foco, menos o Combo de Bairros.

Outra é se o form só tiver esse combo, pode fazer assim também:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyF2 Then
If TypeOf Me.ActiveControl Is ComboBox Then
Exit Sub
End If

'Chama seu form de consulta
Form2.Show vbModal
End If
End Sub

Daí você adapta para o seu caso.

Espero que ajude!
USUARIO.EXCLUIDOS 25/04/2007 14:08:28
#213711
Ajudou Bastante, Obrigado!!!
Tópico encerrado , respostas não são mais permitidas