LIMITANDO CARACTERES
Mas não te dou a certeza de que tá tudo OK, pois vc usa o vb6 e já fazem alguns anos que não mexo mais no VB6, nem tenho ele mais instalado pra estar
sub TestarCampos(Ctl as Textbox)
Dim Msg as string
if Len(Ctl.Text) = Ctl.MaxLength then Exit sub
select Case Ctl.Name
Case [Ô]txtNascimento[Ô]: Msg = [Ô]Nascimento[Ô]
Case [Ô]txtCpf[Ô]: Msg = [Ô][ô]CPF[Ô]
Case [Ô]txtRg[Ô]: Msg = [Ô]RG[Ô]
Case [Ô]txtCep[Ô]: Msg = [Ô]Cep[Ô]
Case [Ô]txtPisPasep[Ô]: Msg = [Ô]Banco[Ô]
Case [Ô]txtAgencia[Ô]: Msg = [Ô]Agência[Ô]
Case [Ô]txtPisPasep[Ô]: Msg = [Ô]Pis/Pasep[Ô]
Case [Ô]txtCtpsNumero[Ô]: Msg = [Ô][ô]CTPS nº[Ô]
Case [Ô]txtCtpsSerie[Ô]: Msg = [Ô]CTPS Série[Ô]
Case [Ô]txtTituloEleitorNumero[Ô]: Msg = [Ô]TÃtulo Eleitor nº[Ô]
Case [Ô]txtTituloEleitorZona[Ô]: Msg = [Ô]TÃtulo Eleitor Zona[Ô]
Case [Ô]txtTituloEleitorSecao[Ô]: Msg = [Ô]TÃtulo Eleitor Seção[Ô]
Case [Ô]txtCnhNumero[Ô]: Msg = [Ô]CNH nº[Ô]
Case [Ô]txtTelefoneResidencial[Ô]: Msg = [Ô]Telefone Residencial[Ô]
Case [Ô]txtTelefoneCelular[Ô]: Msg = [Ô][ô]Telefone Celular[Ô]
Case [Ô]txtDataAdmissao[Ô]: Msg = [Ô]Data Admissão[Ô]
End Select
Msg = [Ô]Campo [ô][Ô] + Msg + [Ô][ô] incorreto, verifique antes de salvar![Ô]
MensagemSistema Msg
Ctl.Text = [Ô][Ô]
Ctl.SetFocus
End Sub
Agora, passa a sub e o nome do componente que quer testa
ex: TestarCampos txtCep [ô]Para testar o CEP e assim sucessivamente
Espero ter ajudado
vlwTchê bagual
Citação::
Tche tú pode fazer assim acredito
Mas não te dou a certeza de que tá tudo OK, pois vc usa o vb6 e já fazem alguns anos que não mexo mais no VB6, nem tenho ele mais instalado pra estar
sub TestarCampos(Ctl as Textbox)
Dim Msg as string
if Len(Ctl.Text) = Ctl.MaxLength then Exit sub
select Case Ctl.Name
Case [Ô]txtNascimento[Ô]: Msg = [Ô]Nascimento[Ô]
Case [Ô]txtCpf[Ô]: Msg = [Ô][ô]CPF[Ô]
Case [Ô]txtRg[Ô]: Msg = [Ô]RG[Ô]
Case [Ô]txtCep[Ô]: Msg = [Ô]Cep[Ô]
Case [Ô]txtPisPasep[Ô]: Msg = [Ô]Banco[Ô]
Case [Ô]txtAgencia[Ô]: Msg = [Ô]Agência[Ô]
Case [Ô]txtPisPasep[Ô]: Msg = [Ô]Pis/Pasep[Ô]
Case [Ô]txtCtpsNumero[Ô]: Msg = [Ô][ô]CTPS nº[Ô]
Case [Ô]txtCtpsSerie[Ô]: Msg = [Ô]CTPS Série[Ô]
Case [Ô]txtTituloEleitorNumero[Ô]: Msg = [Ô]TÃtulo Eleitor nº[Ô]
Case [Ô]txtTituloEleitorZona[Ô]: Msg = [Ô]TÃtulo Eleitor Zona[Ô]
Case [Ô]txtTituloEleitorSecao[Ô]: Msg = [Ô]TÃtulo Eleitor Seção[Ô]
Case [Ô]txtCnhNumero[Ô]: Msg = [Ô]CNH nº[Ô]
Case [Ô]txtTelefoneResidencial[Ô]: Msg = [Ô]Telefone Residencial[Ô]
Case [Ô]txtTelefoneCelular[Ô]: Msg = [Ô][ô]Telefone Celular[Ô]
Case [Ô]txtDataAdmissao[Ô]: Msg = [Ô]Data Admissão[Ô]
End Select
Msg = [Ô]Campo [ô][Ô] + Msg + [Ô][ô] incorreto, verifique antes de salvar![Ô]
MensagemSistema Msg
Ctl.Text = [Ô][Ô]
Ctl.SetFocus
End Sub
Agora, passa a sub e o nome do componente que quer testa
ex: TestarCampos txtCep [ô]Para testar o CEP e assim sucessivamente
Espero ter ajudado
PLUGSOFTSM, como dá para declarar esse tipo de variável [ô]Ctl[ô] que dá no erro?
chamar a função e passar a ela o nome do componente
imagine que vc resolva testar no lostfocus, daà em cada lostfocus vc tem que colocar a função
pro exemplo:
no lostfocus do txtcpf
TestarCampos txtCpf
No lostFocus do txtCep
TestarCampos txtCep
já se vc quiser fazer tipo no click do botão gravar por exempl, vc teria que passar todos os componentes
ficaria algo tipo assim:
for I = 1 to 16
textarcampos choose(i,txtNascimento,txtCpf,txtRg,txtCep,txtPisPasep,txtAgencia,txtPisPasep,txtCtpsNumero,txtCtpsSerie,txtTituloEleitorNumero,txtTituloEleitorZona,txtTituloEleitorSecao, txtCnhNumero,txtTelefoneResidencial,txtTelefoneCelular,txtDataAdmissao)
Next I
Mas analizando por cima, o melhor local para informar isso, seria o LostFocus, pois controla na hora da digitação, e na hora da navegação não perde tempo fazendo testes uma vez que parte-se do princÃpio que os valores estão corretos
Mas muito cuidado com o lostfocus pois se existir algum campo que não seja necessário preencher, o código que vc montou não deixa o usuário ir adiante
Citação::
Tu tens que fazer o seguinte
chamar a função e passar a ela o nome do componente
imagine que vc resolva testar no lostfocus, daà em cada lostfocus vc tem que colocar a função
pro exemplo:
no lostfocus do txtcpf
TestarCampos txtCpf
No lostFocus do txtCep
TestarCampos txtCep
já se vc quiser fazer tipo no click do botão gravar por exempl, vc teria que passar todos os componentes
ficaria algo tipo assim:
for I = 1 to 16
textarcampos choose(i,txtNascimento,txtCpf,txtRg,txtCep,txtPisPasep,txtAgencia,txtPisPasep,txtCtpsNumero,txtCtpsSerie,txtTituloEleitorNumero,txtTituloEleitorZona,txtTituloEleitorSecao, txtCnhNumero,txtTelefoneResidencial,txtTelefoneCelular,txtDataAdmissao)
Next I
Mas analizando por cima, o melhor local para informar isso, seria o LostFocus, pois controla na hora da digitação, e na hora da navegação não perde tempo fazendo testes uma vez que parte-se do princÃpio que os valores estão corretos
Mas muito cuidado com o lostfocus pois se existir algum campo que não seja necessário preencher, o código que vc montou não deixa o usuário ir adiante
Exato PLUGSOFTSM, por isso que eu não coloco as rotina no evento do botão lostFocus kkk, apesar de dar mais trabalho eu prefiro fazer no botão gravar mesmo...
Fiz assim:
Private Sub TestarCampos(Ctl As TextBox)
Dim Msg As String
If Len(Ctl.Text) = Ctl.MaxLength Then Exit Sub
Select Case Ctl.Name
Case [Ô]txtTelefone[Ô]: Msg = [Ô]Telefone[Ô]
If Len(txtTelefone.Text) < 13 Then
[ô]Exit Sub
End If
End Select
Msg = [Ô]Campo [ô][Ô] + Msg + [Ô][ô] incorreto, verifique antes de salvar![Ô]
MensagemDoSistema Msg
Ctl.Text = [Ô][Ô]
Ctl.SetFocus
Exit Sub
End Sub
Daà na rotina do gravar eu coloquei:
For i = 1 To 1
TestarCampos Choose(i, txtTelefone)
[ô]Exit Sub
Next i
Note que funcionou porém tem 2 bugs:
Primeiro: após ele apresentar a mensagem do erro ele já vai prosseguir e vai gravar mesmo assim o registro..
Segundo: Notou ali que coloquei um [ô]Exit Sub[ô] comentado, poisé daà se for colocado errado ele apresenta o erro e pára por ali, mas se estiver correto o campo ele tipo que desabilita o botão de salvar...
Estou até agora e não consegui achar a maneira para dar certo, alguma sugestão por favor.
Coloque na propriedade Tag das textboxs (em design time) o nome do campo.
ex: na textbox txtTelefone, coloque Telefone na propriedade Tag
Os campos que não precisam de verificação devem ficar com a propriedade MaxLength a 0, ex: nome, morada, etc..
Segue o codigo:
Private Function CamposCorrectos() As Boolean
CamposCorrectos = True
Dim ctrl As Control
[ô]Percorre todos os controlos que estão no form onde esta este codigo (Me = SeuForm)
For Each ctrl In Me
[ô]Se o controlo for TextBox
If TypeOf ctrl Is TextBox Then
[ô] ctrl.MaxLength <> 0 <- Para campos como nome ou morada (sem MaxLength definido) não apresente a mensagem
If Len(ctrl.Text) <> ctrl.MaxLength And ctrl.MaxLength <> 0 Then
MsgBox [Ô]Campo [Ô] & ctrl.Tag & [Ô] incorreto, tem de conter [Ô] & ctrl.MaxLength & [Ô] caracteres, verifique antes de salvar![Ô]
ctrl.Text = [Ô][Ô]
ctrl.SetFocus
CamposCorrectos = False
[ô]Para sair da função assim que achar um campo invalido (só apresenta uma mensagem mesmo que existam varios campos errados)
Exit Function
End If
End If
Next
End Function
[ô]Seu botão de salvar
Private Sub cmdSalvar_Click()
If CamposCorrectos Then
[ô]Seu codigo para salvar
End If
End Sub
Citação::
Vou responder a este tópico pela ultima vez, já que tinha respondido 2 vezes antes e fui totalmente ignorado...
Coloque na propriedade Tag das textboxs (em design time) o nome do campo.
ex: na textbox txtTelefone, coloque Telefone na propriedade Tag
Os campos que não precisam de verificação devem ficar com a propriedade MaxLength a 0, ex: nome, morada, etc..
Segue o codigo:
Private Function CamposCorrectos() As Boolean
CamposCorrectos = True
Dim ctrl As Control
[ô]Percorre todos os controlos que estão no form onde esta este codigo (Me = SeuForm)
For Each ctrl In Me
[ô]Se o controlo for TextBox
If TypeOf ctrl Is TextBox Then
[ô] ctrl.MaxLength <> 0 <- Para campos como nome ou morada (sem MaxLength definido) não apresente a mensagem
If Len(ctrl.Text) <> ctrl.MaxLength And ctrl.MaxLength <> 0 Then
MsgBox [Ô]Campo [Ô] & ctrl.Tag & [Ô] incorreto, tem de conter [Ô] & ctrl.MaxLength & [Ô] caracteres, verifique antes de salvar![Ô]
ctrl.Text = [Ô][Ô]
ctrl.SetFocus
CamposCorrectos = False
[ô]Para sair da função assim que achar um campo invalido (só apresenta uma mensagem mesmo que existam varios campos errados)
Exit Function
End If
End If
Next
End Function
[ô]Seu botão de salvar
Private Sub cmdSalvar_Click()
If CamposCorrectos Then
[ô]Seu codigo para salvar
End If
End Sub
Desculpa GANDA_NICK, acabei olhando tão rápido que não vi tua resposta no tópico, te peço desculpas.
Irei testar esta maneira que me enviou e aviso... Obrigado!
ctrl.Text = [Ô][Ô]
ctrl.SetFocus
CamposCorrectos = True
Pois daà ele dá o erro e vai parar tudo...
Porém, na propriedade [ô]maxlenght[ô] dos forms preciso tirar todos os valores destes campos e deixar igual = [ô]0[ô], mas isso é ruim pois daà o usuário vai poder digitar por exemplo centenas de caracteres nestes campos... Dá para mudar a maneira?
Se as textbox[ô]s tiverem bem preenchidas (com o numero de caracteres certo ou com o MaxLength = 0) ele não entra no IF de:
If Len(ctrl.Text) <> ctrl.MaxLength And ctrl.MaxLength <> 0 Then
logo não passar na linha onde seta [ô]CamposCorrectos = False[ô]
Se entra nesse IF é porque a textbox está mal preenchida, faça o debug nessa função e veja o porquê de entrar nesse IF.
Se não souber depurar o codigo fica aqui um link de um video (em inglês)..
https://www.youtube.com/results?search_query=vb6+debug+portugues&nohtml5=False
ctrl.Text = [Ô][Ô]
ctrl.SetFocus
CamposCorrectos = False [ô]Não pode ser [txt-color=#e80000]True[/txt-color]
Não ha erro neste código e sim falha.
O famoso TRIM.