CLASSE VALIDAR CAMPOS

ALTAIR148 29/07/2011 18:25:31
#380329
Boa noite,

Gostaria de usar o código abaixo para validar os campos dos meus forms. Só que como eu estou desenvolvendo a minha aplicação em camadas esta dando erro nessa linha:

For Each ctl In campos

Descrição do Erro: [ô]Control[ô] is a type and cannot be used as an expression[ô]

Abaixo segue o código.

Imports System.Windows.Forms
Public Class ValidaCampos
Public Function Validar()
Dim ctl As Control
For Each ctl In Control
If TypeOf ctl Is TextBox Then
[ô]TextBox
If ctl.Text = [Ô][Ô] And ctl.Visible = True Then
MsgBox([Ô]Você não preencheu o campo [Ô] & ctl.Name, vbInformation, [Ô]Campo em Branco[Ô])
ctl.SetFocus()
Exit Function
End If
[ô]ComboBox
If ctl.ComboBox = [Ô][Ô] Then
MsgBox([Ô]Você não preencheu o campo [Ô] & ctl.Name, vbInformation, [Ô]Campo em Branco[Ô])
ctl.SetFocus()
Exit Function
End If
End If
Next ctl
End Function
End Class



Obrigado.
LROSSI 29/07/2011 19:04:34
#380330
no ctl.combobox vc tem que trocar por DirectCast(ctrl, ComboBox).Text = [Ô][Ô] para pegar a propriedade text do combo...
ALTAIR148 29/07/2011 19:31:14
#380332
Boa noite,

Mas o erro ocorre na linha

For Each ctl In campos



Obrigado.
RODRIGOFERRO 29/07/2011 23:49:03
#380349
Resposta escolhida
vamos la veja assim !



Private Sub Validar(ByVal Page As Control)

[ô]loop pelos controles
For Each ctrl As Control In Page.Controls

[ô]captura se o campo é textbox
If TypeOf ctrl Is TextBox Then

With CType(ctrl, TextBox)

If .Visible AndAlso .Text = String.Empty Then

MessageBox.Show([Ô]Você não preencheu o campo [Ô] & .Name, [Ô]Campo em Branco[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
.Focus()
Exit Sub

End If

End With

ElseIf TypeOf ctrl Is ComboBox Then

With CType(ctrl, ComboBox)

If .Visible AndAlso .SelectedIndex < 0 Then

MessageBox.Show([Ô]Você não preencheu o campo [Ô] & .Name, [Ô]Campo em Branco[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
.Focus()
Exit Sub

End If

End With

Else

[ô]Captura se o campo é do tipo container, isso é se possui controles dentro e chama a sub novamente !
If ctrl.Controls.Count > 0 Then

Validar(ctrl)

End If

End If

Next

End Sub



chame ele passando o form Validar(me)... Abraços !
RODRIGOFERRO 30/07/2011 08:13:19
#380357
Ah e pra nao ficar esse monte de Messagebox na rotina/função, voce pode criar um sub para emitir essas Messagebox..

Abraços
PEGUDO 30/07/2011 19:04:42
#380388
cara, eu acho que seu problema está na declaração da variável
Dim ctl As Control

Apague esta linha e declare a variável diretamente no [txt-color=#0000f0]For[/txt-color]
For Each ctl As Control In Control

Exemplo: Fazendo loop nos controles [txt-color=#0000f0]TexBox[/txt-color] de um Form1
[txt-color=#0000f0]For Each[/txt-color] Caixa [txt-color=#0000f0]As[/txt-color] TextBox [txt-color=#0000f0]In Me[/txt-color].Controls.OfType([txt-color=#0000f0]Of[/txt-color] TextBox)()
Msgbox(Caixa.Text)
[txt-color=#0000f0]Next[/txt-color]


Agora em
For Each ctl In Control
Control é o nome de sua camada?
Porque o For..Each vai procurar controles dentro de um conteiner, por exemplo um Form, Um Panel, um GroupBox
Verifique qual é a lógica que seu programa vai seguir, ok?
Qualquer coisa posta aí
ALTAIR148 01/08/2011 12:46:01
#380494
Boa tarde,

O nome da minha camada é Configuracoes.


Obrigado.
RODRIGOFERRO 06/08/2011 12:58:39
#380968
Testou o codigo que passei ?
ALTAIR148 06/08/2011 17:29:48
#380970
Boa tarde,

Ainda não consegui, estou com problemas para chamar a classe, abaixo segue as duas formas que estou utilizando e cada uma com seu erro:


Private ValidaCampos As New Configuracoes.ValidaCampos


ValidaCampos.Validar(frmContasPagar) - Erro abaixo



[ô]Silva_Informática.frmContasPagar[ô] cannot refer to itself through its default instance; use [ô]Me[ô] instead. C:\Documents and Settings\Dylla\Desktop\Sistema\Sistema\Silva Informática\Silva Informática\formularios\Cadastros\frmContasPagar.vb 99 30 Silva Informática


ValidaCampos.Validar(me.frmContasPagar) - Erro abaixo

[ô]frmContasPagar[ô] is not a member of [ô]Silva_Informática.frmContasPagar[ô]. C:\Documents and Settings\Dylla\Desktop\Sistema\Sistema\Silva Informática\Silva Informática\formularios\Cadastros\frmContasPagar.vb 99 30 Silva Informática



Obrigado
RODRIGOFERRO 06/08/2011 21:38:06
#380976
Voce esta passando o nome do Formulario direto, o formulario em si tambem é uma classe e deve ser instanciado antes de chama-lo.

Dim MeuForm as form = new frmContasPagar
MeuForm.show()
ValidaCampos.Validar(MeuForm)

Abraços

ALTAIR148 06/08/2011 22:03:04
#380977
Boa noite,

Bom agora funciona por partes, por exemplo coloquei esse código no botão que vai verificar se tudo esta preenchido antes de gravar no bando de dados, o problema é que ele faz é abrir um novo form e ele faz a verificação no novo form que é aberto e não no que realmente estou fazendo os lançamentos.

Obrigado.
Tópico encerrado , respostas não são mais permitidas