LIMITANDO CARACTERES

PLUGSOFTSM 07/04/2016 14:09:07
#460689
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
MILTONSILVA94 08/04/2016 07:23:34
#460727
Vou testar e depois digo...
vlwTchê bagual
MILTONSILVA94 08/04/2016 15:36:08
#460770
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?
PLUGSOFTSM 08/04/2016 15:54:35
#460772
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
MILTONSILVA94 10/04/2016 03:13:58
#460809
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.
GANDA.NICK 10/04/2016 07:45:30
#460813
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
MILTONSILVA94 10/04/2016 13:50:04
#460822
GANDA_NICK
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!
MILTONSILVA94 10/04/2016 14:17:35
#460823
GANDA_NICK, testei aqui, e funcionou, só precisei alterar a linha antes de sair da função que estava [ô]CamposCorrectos = False[ô] e ficou como:
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?
GANDA.NICK 10/04/2016 15:06:10
#460824
Não tem que alterar a linha [ô]CamposCorrectos = False[ô], esta linha serve mesmo para dizer que os campos não estão correctos para posteriormente na sub do botão salvar não executar o codigo para salvar....

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


OMAR2011 10/04/2016 15:38:36
#460825
Acredito que tu não compreendeu.
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.
Página 2 de 3 [22 registro(s)]
Tópico encerrado , respostas não são mais permitidas