VALIDAR CAMPOS EM FORMULARIO

FOXMAN 16/11/2011 17:17:35
#389234
Amigos, estou aqui com um impasse danado.....
Estou sem lógica alguma para determinar como validar alguns campos em um form.

é o seguinte, tenho alguns textbox em um formulário, para que seja possível realizar o cadastro, apenas alguns campos deste formulário são OBRIGATÓRIO, de forma que o botão salvar somente estará disponível se este critério for satisfeito.

Exemplo :

txtNome, txtcidade,txtfone são OBRIGATÓRIOS. Neste caso o Botão salvar deverá ficar habilitado apenas se os tres campos estiverem preenchidos.

OBSERVAÇÃO: Tenho uma regra de negocio na minha classe pessoa que irá fazer a verificação antes de inserir no banco, porém quero permitir que o botão SALVAR fique habilitado somente se os campos obrigatórios no formulário forem preenchidos.....

Pensei em criar uma função e enviar o GroupBox(onde contem todos os textbox) e ao mudar de campo no formulário eu verificasse se o campo está preenchido ou não , mas então eu poderia cair em uma verificação ineficaz, pois alguns campos não obrigatórios também seriam verificados, o que poderia me retornar false.

Alguém tem alguma sugestão de como fazer essa verificação ?????
KERPLUNK 16/11/2011 17:30:41
#389235
Está fazendo WEB ou Desktop?
ALEXPASSOS 16/11/2011 17:43:45
#389237
E se você colocar um timer verificando os campos
KERPLUNK 16/11/2011 17:49:37
#389238
Timer não é uma idéia muito boa... O melhor é verificar nos eventos de [Ô]lostfocus[Ô] de cada um dos componentes, se os valores dos mesmos estiverem em branco, botão.enabled = false
ALEXPASSOS 16/11/2011 17:58:00
#389240
Fiz um exemplo simples com timer e esta funcionando cara
AJSO 16/11/2011 18:05:13
#389241

Essa dúvida é paraVB 6.0 ou DotNet Framework(C#, VB.Net, ASP.Net)
TECLA 16/11/2011 18:07:57
#389242
Supondo que o projeto eh WindowsForms, uma saida simples seria atribuir um valor para a propriedade Tag do controle TextBox cujo preenchimento seja obrigatorio. Quando a classe receber o GroupBox, fica facil saber se o campo requerido foi preenchido.
FOXMAN 16/11/2011 18:54:26
#389243
Citação:

:
Está fazendo WEB ou Desktop?


Desktop, mas o caso de uso poderia se aplicar a web tbem.....

Citação:

:
E se você colocar um timer verificando os campos


O projeto é N-TIER(diversas camadas) não fica muito agradável/correto, ter muito código na camada apresentação.

Citação:

:
Timer não é uma idéia muito boa... O melhor é verificar nos eventos de [Ô]lostfocus[Ô] de cada um dos componentes, se os valores dos mesmos estiverem em branco, botão.enabled = false


Estou abolindo este tipo de código.Estou procurando utilizar pouquissimo codigo na camada apresentação.
Pode até ser que eu não tenha opção ae sim terei que apelar.


Citação:

:
Fiz um exemplo simples com timer e esta funcionando cara


Vou examinar o codigo. Agradeço...

Citação:

:

Essa dúvida é paraVB 6.0 ou DotNet Framework(C#, VB.Net, ASP.Net)


C#.NET

Citação:

:
Supondo que o projeto eh WindowsForms, uma saida simples seria atribuir um valor para a propriedade Tag do controle TextBox cujo preenchimento seja obrigatorio. Quando a classe receber o GroupBox, fica facil saber se o campo requerido foi preenchido.


Tecla, essa propriedade já esta sendo utilizada para saber se em um cadastro existente houve alguma alteração.
Por exemplo :
Ao carregar um cadastro, os dados originais ficarão na Tag do controle e ao sair do campo será verificado o valor da Tag com o valor o Text, caso o valor seja diferente será habilitado o Botão Salvar/Gravar.

Continuo no aguardo de uma ajuda.

FOXMAN 19/11/2011 12:06:35
#389478
Bem, essa questão de validação de campos está resolvida, ficou EXATAMENTE do jeito que eu quero.

Exemplo.
Ao clicar em Novo cadastro, você é direcionado aos textbox, na medida que vai preenchendo o sistema vai analisando se as informações já são suficiente para liberar o botão SALVAR, ou seja, é necessário que alguns campos básicos seja preenchido.

Abaixo o código no formulário que realiza a validação, criei uma função na classe pessoa que indiretamente se tornou uma regra de negocio...dispensando diretamente a regras nas propriedades da classe(mesmo assim elas existem e utilizarei apenas para checar se os dados passados são válidos, afinal esta é a finalidade das regras do negócio.)


  protected override bool ProcessDialogKey(Keys keyData)
{
switch(keyData)
{
case Keys.Enter:
if(gbDadosCadastrais.Controls.OfType<Control>().First(x => x.Focused).Name.ToString() == [Ô]txtProcura[Ô])
{
EventArgs e = new EventArgs();
btnPesquisa_Click(btnPesquisa, e);
break;
}
if(Pessoa.VerificaDados(gbDadosCadastrais.Controls.OfType<Control>().First(x => x.Focused), gbDadosCadastrais))
{
btnSalvar.Enabled = true;
return base.ProcessDialogKey(Keys.Tab);
}
else
{
btnSalvar.Enabled = false;
}
return base.ProcessDialogKey(Keys.Tab);
}
return base.ProcessDialogKey(keyData);


No mesmo sentido e na mesma função(Pessoa.VerificaDados), eu checo se um campo foi alterado, e caso afirmativo eu libero o botão SALVAR.
A checagem compara os conteudos TAG e TEXT dos objetos. Nas propriedades TAG dos objetos eu gravo os dados atuais, e exibo esses dados na propriedade Text dos objetos, caso Text seja diferente de Tag eu libero o Salvar.

SPRITU 19/11/2011 12:14:49
#389479
Bom Dia Fox!!!

Sugestão, crie seu proprio controle, herdando o textbox =)

I love OOP

  Public Class TextBoxRequired
Inherits System.Windows.Forms.TextBox

Private mstrInitialValue As String

[ô] If the control[ô]s value equals its initial
[ô] value, it[ô]s not valid. Normally, the
[ô] initial value is an empty string--therefore,
[ô] when validating the control, if the current
[ô] value is the same as the initial value
[ô] (that is, it[ô]s still empty) then the
[ô] control isn[ô]t valid.
<Category([Ô]Behavior[Ô]), _
Description([Ô]Specifies the value the control [Ô] & _
[Ô]must differ from in order to validate.[Ô])> _
Public Property InitialValue() As String
Get
Return mstrInitialValue
End Get
Set(ByVal Value As String)
mstrInitialValue = Value
End Set
End Property

[ô] Provide a way to determine if the control[ô]s
[ô] text is valid, even if the client has turned
[ô] off the CausesValidation property for the control.
<Browsable(False)> _
Public ReadOnly Property Valid() As Boolean
Get
Return IsValid()
End Get
End Property

Private Function IsValid() As Boolean
Return Me.Text <> mstrInitialValue
End Function

Protected Overrides Sub OnValidating(ByVal e As CancelEventArgs)
e.Cancel = Not IsValid()
MyBase.OnValidating(e)
End Sub
End Class


Citação:

Fonte:http://social.msdn.microsoft.com/Forums/eu/winforms/thread/b90e080f-ef78-403d-9994-f561a9366b20



Eu ja fiz algo semelhante e me atendeu muito bem =)
FOXMAN 19/11/2011 13:08:58
#389481
Spritu, legal isso ae, mas eu teria que fazer a mesma coisa praticamente, uma vez que não utilizo praticamente nenhuma propriedades dos textbox no formulário, tudo é praticamente controlado pela classe responsável pelo formulário, que neste caso é Pessoa.

Não seria isso ??

Outra coisa a classe VerificaDados, não faz verificação apenas em textbox, verifica também combobox, button,radiobutton etc...ou seja , ela faz comparação da propriedade tag com a propriedade text dos objetos do form.

Agora estou brigando(sim, pois comecei a pouco tempo utilizar c#, então é uma briga) para atribuir itemData ao combobox, e recuperar posteriormente, o problema está na conversão de um objeto em combobox ou de um um item de um laço(foreach) em um combobox.

foreach(Control X in gbDadosCadastrais.Controls)
{
if(X is ComboBox)
{
//Por exemplo, preciso criar uma nova instancia de um combobox, e atribuir a ele o X(que tbem é um combobox), porém não esta sendo possível
ComboBox cmb = new ComboBox();
cmb = (X as ComboBox);
itemdata.Nome = drw[0][dr.ColumnName.ToString()].ToString();
itemdata.Id = [Ô]123[Ô];
cmb.Items.Add(itemdata);
cmb.Tag = drw[0][dr.ColumnName.ToString()].ToString();
(X as ComboBox) = cmb;//aqui da pau....
//Se eu deixar como abaixo ,funciona, porem o objeto X não tem a propriedade SelectedItem
(X as ComboBox).Text = drw[0][dr.ColumnName.ToString()].ToString();
(X as ComboBox).Tag = drw[0][dr.ColumnName.ToString()].ToString();


X = cmb;//Nao funcionou
(X is ComboBox) = cmb;//não funcionou

}
}


O erro : The left-hand side of an assignment must be a variable, property or indexer

Estou tentando isso simplesmente por que o objeto X não tem todas as propriedades do combobox(não sei porque).




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