FOCO EM CONTROLE
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.
Marcelino Neto
VB6.0
Access2000
Dao
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
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
Já tentei desta forma e continua mudando o foco.
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
@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:
Mas como eu me atrasei pra escrever hehe
abraços
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
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!
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!
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:
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!
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!
Ajudou Bastante, Obrigado!!!
Tópico encerrado , respostas não são mais permitidas