REFORMULAR CAMPO [ô]TEXT[ô]

MILTONSILVA94 16/03/2016 10:40:33
#459278
Estou querendo diminuir meu código para validar [ô]campos vazios[ô] nas telas pois tenho alguns formulários que tem mais de 25 campos text em cada um, enfim... tenho para cada campo a validação abaixo:

Private Sub RotinaSalvar()
If Trim(txtNome.text) = [Ô][Ô] Then
MensagemDoSistema [Ô]Campo [ô]Nome[ô] não foi informado, verifique antes de salvar![Ô]
txtNome.SetFocus
Exit Sub
End If
End Sub

Pensei em fazer igual abaixo, porém quero que o [ô]SetFocus[ô] caso algum destes campos abaixo esteja em branco, ele retorne o foco para somente o campo que não foi preenchido:

Private Sub RotinaSalvar()
If txtNome.text = [Ô][Ô] or txtMatricula.text = [Ô][Ô] or txtNascimento.text = [Ô][Ô] or txtCpf.text = [Ô][Ô] or txtRg.text = [Ô][Ô] or txtEndereco.text = [Ô][Ô] or txtNumeroCasa.text = [Ô][Ô] or txtBairro.text = [Ô][Ô] or txtCidade.text = [Ô][Ô] or txtCep.text = [Ô][Ô] or txtBancoNumero.text = [Ô][Ô] or txtBancoNome.text = [Ô][Ô] or txtAgencia.text = [Ô][Ô] or txtContaCorrente.text = [Ô][Ô] or txtPisPasep.text = [Ô][Ô] or txtCtpsNumero.text = [Ô][Ô] or txtCtpsSerie.text = [Ô][Ô] or txtTituloEleitorNumero.text = [Ô][Ô] or txtTituloEleitorZona.text = [Ô][Ô] or txtTituloEleitorSecao.text = [Ô][Ô] or txtCnhNumero.text = [Ô][Ô] or txtNomeMae.text = [Ô][Ô] or txtNomePai.text = [Ô][Ô] or txtTelefoneResidencial.text = [Ô][Ô] or txtTelefoneCelular.text = [Ô][Ô] or txtDataAdmissao.text = [Ô][Ô] or txtSalario.text = [Ô][Ô] Then
[ô]Aqui vai o comando do SetFocus que quero adicionar mas não sei como[ô]
Exit Sub
End If

Como posso fazer isso?
ACCIOLLY 16/03/2016 15:12:53
#459313
Resposta escolhida
Cara faz um bom tempo! mas se não me engano a função para isso era mais ou menos assim:

Dim controle As Control
Dim i As Integer

For i = 0 To Form1.Controls.Count – 1
Set controle = Form1.Controls(i)
If TypeOf controle Is TextBox Then
If Trim(controle) = [Ô][Ô] Then
MensagemDoSistema [Ô]Campo não informado, verifique antes de salvar![Ô]
controle.SetFocus
Exit Sub
End If
End If
Next i


Bem acho que era assim! se não era tá quase lá! rsrsrsrs
Té Mais
MESTRE 16/03/2016 15:30:16
#459314
Segue:
   Public Function Testar_vazio(ByVal tela As Object) As Boolean
Dim controle As Control
Dim controle2 As Control
For Each controle In tela.Controls
If TypeOf controle Is TextBox Or TypeOf controle Is MaskedTextBox Or TypeOf controle Is DateTimePicker Or TypeOf controle Is CheckBox Or TypeOf controle Is ComboBox Or TypeOf controle Is TableLayoutPanel Then
If controle.Text = [Ô][Ô] And controle.Tag <> [Ô]x[Ô] Then
controle.Focus()
MessageBox.Show(controle.Name)
Return True
End If
Next
End Function

Para não considerar o controle ou seja se puder ser nulo o textbox voce coloca a propriedade Tag com um [Ô]x[Ô]
ACCIOLLY 16/03/2016 15:34:02
#459315
E pra quem mais estiver interessado, o equivalente para a plataforma .Net

C#
foreach(Control controle in this.Controls)
{
if(controle is TextBox)
{
if(controle.Text == string.Empty)
{
MessageBox.Show([Ô]Preencha todos os campos.[Ô]);
controle.Focus();
break;
}
}
}


VB.Net
 Dim controle As Control
For Each controle In Me.Controls
If TypeOf controle Is TextBox Then
If controle.Text = String.Empty Then
MessageBox.Show([Ô]Preencha todos os campos.[Ô])
controle.Focus()
Exit For
End If
End If
Next

MILTONSILVA94 16/03/2016 16:01:26
#459316
Saudação ACCIOLLY vlw pela dica, irei testar.
MILTONSILVA94 16/03/2016 16:03:29
#459317
Ok MESTRE, fiz conforme pediu e olha o erro que aparece:
PLUGSOFTSM 16/03/2016 17:15:38
#459320
Vc pode fazer assim

Private Sub RotinaSalvar()
For Each C As TextBox In New TextBox() {txtNome, txtMatricula, txtNascimento, txtCpf, txtRg, txtEndereco, txtNumeroCasa, txtBairro, txtCidade, txtCep, txtBancoNumero, txtBancoNome, txtAgencia, txtContaCorrente, txtPisPasep, txtCtpsNumero, txtCtpsSerie, txtTituloEleitorNumero, txtTituloEleitorZona, txtTituloEleitorSecao, txtCnhNumero, txtNomeMae, txtNomePai, txtTelefoneResidencial, txtTelefoneCelular, txtDataAdmissao, txtSalario}
If C.Text = [Ô][Ô] Then
C.Focus()
Exit Sub
End If
Next
End Sub

no conjunto entre {} vc informa a lista de componentes que quer testar
OMAR2011 16/03/2016 18:12:13
#459323
O Exemplo do Mestre achei um pouco diferente e mais próximo do desejado.
Porém deve ser modificado para Vb6.
Por isto está acontecendo o erro.
KERPLUNK 16/03/2016 19:11:23
#459326
Concordo como o OMAR, o exemplo do MESTRE é bem bacana e pode ser colocado como um método de extensão e por isso estará disponível para todo e qualquer textbox em qualquer form de qualquer parte do sistema.
MESTRE 17/03/2016 07:30:14
#459337
Obrigado galera pelo elogio, em .NET tenho uma classe (clsControle) mesmo sendo WinForms que auxilia e muito para não perder tempo com besteiras, esse exemplo é aplicável a uma série de outras ações etc, algumas delas:

- Testar Vazio.
- Limpar tela.
- Habilitar tela.
- Desabilitar tela.

Tudo isso em 4 linhas, eu testo vazio, habilito, limpo a tela e desabilito se eu quiser e hoje não preciso testar campo a campo, dar enabled true ou false em campo a campo, sem sofrimento algum e como disse você deve prestar atenção a propriedade .Tag pois não me recordo se a mesma existe em Vb6, pode ser um pouco trabalhoso acertar más depois disso você nunca vai fazer mais um If txt1.text = [Ô][Ô] and txt2.text = [Ô][Ô] and txt3.text = [Ô][Ô] ...... más a propriedade .Tag <> [Ô]x[Ô] que vai dizer os campos que deverão ser ignorados..

Se não me engano como passaram no Vb6 é SetFocus e não Focus, to meio enferrujado pra Vb6 tente tirar o Focus.. Como eu utilizo? la no botão faço assim:

  Dim controle as new clsControle

Botão Gravar por ex:
If controle.Testar_vazio(Me) = True Then
MessageBox.Show([Ô]Preencha os campos obrigatórios[Ô])
Else
[ô]INSERE!
End If
MILTONSILVA94 17/03/2016 07:30:44
#459338
Certo PLUGSOFTSM, OMAR, e KERPLUNK... Obrigado

PLUGSOFTSM o que faz a variável [ô]As[ô]? Pois olha o erro que ocorre,
Página 1 de 5 [48 registro(s)]
Tópico encerrado , respostas não são mais permitidas