BUCHA DAS GRANDES - CURSOR ESTA PRESO NO CAMPO DAT

USUARIO.EXCLUIDOS 11/06/2007 15:22:33
#220709
Ja tentei de tudo mas não consegui solução.

Tenho duas telas onde a segunda tela e o grade problema. Nos campos datas não quero deixar a pessoa passar sem digitar nada ,e se digitar errado ela auto_limpa o campo e obriga a pessoa a preencher de novo.
Porem que acabei ficando preso porque toda vez que eu quero dar um limpa tela e alguma data esta em branco ,pede para informar a data pu quando vou voltar para o campo anterior pede para informar a data.

Falam que nao e correto voce fazer um setfocus nessas situações.
Alguma boa alma tem ideia de como posso resolver essa bucha.


R1VN002 = FORM2

Private Sub bot_limpar_Click()
'Funcao Limpar
TB_nom.Text = ""
ob_ets.Value = False
ob_spl.Value = False
ob_crc.Value = False


If Fu_limpa_data(tb_dt) = False Then
'Chamando a funcao limpa data tb_dt em module1.bas
MsgBox "TESTE"
Exit Sub
End If

tb_dv.PromptInclude = False
'Limpa o campo documento versao
tb_dv.Mask = "##/####"
tb_dv.Text = ""
tb_dv.PromptInclude = True

tb_vrs.PromptInclude = False
'Limpa o campo Versao
tb_vrs.Mask = "#.#"
tb_vrs.Text = ""
tb_vrs.PromptInclude = True


End Sub


Private Sub bot_voltar_Click()
Unload Me
End Sub



Private Sub tb_dt_KeyPress(KeyAscii As Integer)
'Funcao- Quando chegar no 10 digito ,mudara de campo
If tb_dt.SelStart = 9 Then
SendKeys "{TAB}"

End If

End Sub


Private Sub TextBox1_LostFocus()

If Fu_Checa_Data(TextBox1.Text) = False Then
TextBox1.SetFocus
End If



End Sub



Private Sub tb_dt_LostFocus()
' Se o tamanho do campo for igual a 0 ,ele retorna ate o preenchimento correto
If Len(tb_dt.ClipText) < 8 And Len(tb_dt.ClipText) = 0 Then
MsgBox "Informe a data.", vbExclamation, "ATENÇÃO"
tb_dt.SetFocus
Exit Sub
End If
If tb_dt.ClipText <> "" Then
' Se o valor digitado for diferente de branco ele entra na funcao FU_Checa
If Not Fu_Checa_Data(CStr(tb_dt.Text)) Then
MsgBox "DATA INVALIDA", vbExclamation, "ATENÇÃO"
'Limpa campo apos o retorno do foco
tb_dt.Text = "__/__/____"
tb_dt.SetFocus
Exit Sub
End If
End If
End Sub



Private Sub tb_dv_KeyPress(KeyAscii As Integer)
'Funcao- Quando chegar no 10 digito ,mudara de campo
If tb_dv.SelStart = 6 Then
SendKeys "{TAB}"

End If

End Sub



Private Sub tb_dv_LostFocus()
' Se o tamanho do campo menor que 6 ou igual a 0 ,ele retorna ate o preenchimento correto
If Len(tb_dv.ClipText) < 6 And Len(tb_dv.ClipText) = 0 Then
MsgBox "Informe a data.", vbExclamation, "ATENÇÃO"
tb_dv.SetFocus
Exit Sub
End If
If tb_dv.ClipText <> "" Then
' Se o valor digitado for diferente de branco ele entra na funcao FU_Checa
If Not Fu_Checa_Data_Documentacao(CStr(tb_dv.Text)) Then
MsgBox "DATA INVALIDA", vbExclamation, "ATENÇÃO"
tb_dv.Text = "__/____"
tb_dv.SetFocus
Exit Sub
End If
End If
End Sub




Private Sub TB_nom_Change()
'Verifica no campo nome ,que seja digitado somente letras com numeros
If IsNumeric(TB_nom) = True Then
MsgBox "VERIFIQUE INFORMAÇÃO DIGITADA"
TB_nom.Text = ""
TB_nom.SetFocus
Exit Sub
End If

'Data da maquina no rodapé
pd3d_status(1).Caption = Date

End Sub




Private Sub tb_vrs_KeyPress(KeyAscii As Integer)
'Permite somente número no campo
On Error Resume Next
'KeyAscii = SoNumeros(KeyAscii)
Call SU_Permite_Numero_versao(KeyAscii)


'Funcao- Quando chegar no 02 digito ,mudara de campo
If tb_vrs.SelStart = 2 Then
SendKeys "{TAB}"
End If


End Sub







USUARIO.EXCLUIDOS 11/06/2007 16:21:41
#220728
Cara o problema deve estar na sua função:

Fu_limpa_data(tb_dt), poste ela para ficar + fácil na ajuda.

O código que postou parece estar correto, porque o envento LostFocus só entraráe em ação se antes o campo data estiver em foco...

E para limpar as datas seria uma sub assim:

sub LimpaCampos()
txtData.text=""
ou
txtData.text="__/____"
end Sub

USUARIO.EXCLUIDOS 11/06/2007 16:33:45
#220736
Frau só vc mesmo para aguentar essas duvidas rsrsrsr

Olhe o codigo está ai abaixo ,porém não sei se vc entendeu bem.

Quando eu deixo de preencher alguma data ele me força a ficar num loop ate o preenchimento da mesma ,isso foi opção ,mas quando vc dá um limpa_tela e alguma data não foi preenchida fica nessa ,preencha data ,preencha data ,preencha data , não sai entendeu ,simplesmente fica nessa.


Será que tem solução nesse caso.

Public Function Fu_limpa_data(mskEdit As MaskEdBox)

Fu_limpa_data = False

mskEdit.PromptInclude = False
mskEdit.Mask = "##/##/####"
mskEdit.Text = ""
mskEdit.PromptInclude = True

Fu_limpa_data = True


End Function


USUARIO.EXCLUIDOS 11/06/2007 16:47:45
#220741
Entendi simmm! Faça o seguinte esqueçe esta função de limpar e altere o codigo do botão limpar conforme abaixo:

Private Sub bot_limpar_Click()
'Funcao Limpar
TB_nom.Text = ""
ob_ets.Value = False
ob_spl.Value = False
ob_crc.Value = False

tb_dt.Text = "__/__/____" 'Limpa data

tb_dv.PromptInclude = False
'Limpa o campo documento versao
tb_dv.Mask = "##/####"
tb_dv.Text = ""
tb_dv.PromptInclude = True

tb_vrs.PromptInclude = False
'Limpa o campo Versao
tb_vrs.Mask = "#.#"
tb_vrs.Text = ""
tb_vrs.PromptInclude = True


End Sub


Tente ai, depois poste.
USUARIO.EXCLUIDOS 11/06/2007 17:07:25
#220755
Ok acabei de ter outra ideia ,e se eu trocasse o campo grifado por diferente e fizesse a verificação somente no quando eu clicar no botão confirma.

Tipo fazer preenher os campos vazios "Data" e "Nome" por exemplo.

E uma ideia ,isso em codigo como ficaria ?

Mas antes irei fazer seu teste.

' Se o tamanho do campo for igual a 0 ,ele retorna ate o preenchimento correto
If Len(tb_dt.ClipText) < 8 And Len(tb_dt.ClipText) <> 0 Then
MsgBox "Informe a data.", vbExclamation, "ATENÇÃO"
tb_dt.SetFocus
Exit Sub
USUARIO.EXCLUIDOS 11/06/2007 17:19:24
#220761
Sim, mas vc testou a alteração que fiz no fonte (Sub bot_limpar_Click)()?????????????? deu certo?
USUARIO.EXCLUIDOS 11/06/2007 21:58:21
#220787
Resposta escolhida
Posso só lembrar um comentário que fiz em outro tópico ?

Citação:

Caso queira mesmo continuar com seu processo (usuário pode não saber o que fazer caso queira simplesmente encerrar o programa estando com o cursor neste campo) vamos lá



Como desenvolvedores precisamos estar preparados para mudanças de planos não previstas.
Eu alertei para que vc teria problemas dificultando sua programação e o usuário para encerrar sua aplicação caso estivesse neste ponto.

Depois de entregar o programa vão te chamar para mudar isto !

Mas vamos lá, não sou o dono da verdade (apenas de um pouco mais de experiencia) e por isto siga por onde quiser.

Faz isso fii:

No botão OK:

Private Sub Command1_Click()
If ValidaTela = False Then
Exit Sub

End If

'Executa Comandos caso validado

End Sub

Private Function ValidaTela() As Boolen
If Not IsDate(txtData1.text) Then
Msgbox "Não é possivel Confirmar a operação sem uma data inicial válida", vbCritical, "Data Inválida"
txtData1.Text = ""
txtData1.setfocus
Exit Function

End If

'Repita a verificação para todos campos que exijam validação

'Caso Tudo OK
ValidaTela = True

End Function
USUARIO.EXCLUIDOS 12/06/2007 10:49:38
#220858
Cara show de bola realmente vc tinha razão de conferir somente na confirmação do programa.

Testei de cara mas não funcionou irei dar uma analisada e posto o resultado.
USUARIO.EXCLUIDOS 12/06/2007 11:35:07
#220871
Emerson Tadeu

Estava pensando ao inves de eu fazer um função em um modulo ,eu poderia fazer um função simples para verificar ,só que ai como não sei a sintase.



Aqui ele ja verifica ,mas como tem mais de um campo como faça para ele ver os outros campos ,ja tentei And mais da pau.

Private Sub bt_confirma_Click()
If Trim(TB_nom.Text) = "" Then
MsgBox "Não é possivel Confirmar a operação sem o preenchimento dos campos", vbCritical, "Data Inválida"

TB_nom.SetFocus



End If



[c]Private Sub bt_confirma_Click()
If Trim(TB_nom.Text) Or Trim(tb_vrs.Mask) = "" Then
MsgBox "Não é possivel Confirmar a operação sem o preenchimento dos campos", vbCritical, "Data Inválida"

TB_nom.SetFocus
tb_vrs.SetFocus



End If
USUARIO.EXCLUIDOS 12/06/2007 14:01:59
#220890
Alguém pode dar uma ajuda.

Emerson Tadeu

Estava pensando ao inves de eu fazer um função em um modulo ,eu poderia fazer um função simples para verificar ,só que ai como não sei a sintase.



Aqui ele ja verifica ,mas como tem mais de um campo como faça para ele ver os outros campos ,ja tentei And mais da pau.


Private Sub bt_confirma_Click()
If Trim(TB_nom.Text) = "" Then
MsgBox "Não é possivel Confirmar a operação sem o preenchimento dos campos", vbCritical, "Data Inválida"

TB_nom.SetFocus



End If



[c]Private Sub bt_confirma_Click()
If Trim(TB_nom.Text) Or Trim(tb_vrs.Mask) = "" Then
MsgBox "Não é possivel Confirmar a operação sem o preenchimento dos campos", vbCritical, "Data Inválida"

TB_nom.SetFocus
tb_vrs.SetFocus



End If



USUARIO.EXCLUIDOS 12/06/2007 14:15:52
#220896
ALLAN, deste jeito que vc está tentando fazer tem que ser um por vez, veja abaixo:

[c]Private Sub bt_confirma_Click()
If Trim(TB_nom.Text)="" then
MsgBox "Não é possivel Confirmar a operação sem o preenchimento do nome", vbCritical, "Data Inválida"
TB_nom.SetFocus
end if
if Trim(tb_vrs.Mask) = "" Then
MsgBox "Não é possivel Confirmar a operação sem o preenchimento do campo data", vbCritical, "Data Inválida" ' Coloque a msg referente ao campo testado.
tb_vrs.SetFocus
end if

end sub


Página 1 de 2 [18 registro(s)]
Tópico encerrado , respostas não são mais permitidas