VALIDAR CAMPOS EM FORMULARIO
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 ?????
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 ?????
Está fazendo WEB ou Desktop?
E se você colocar um timer verificando os campos
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
Fiz um exemplo simples com timer e esta funcionando cara
Essa dúvida é paraVB 6.0 ou DotNet Framework(C#, VB.Net, ASP.Net)
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.
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.
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.)
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.
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.
Bom Dia Fox!!!
Sugestão, crie seu proprio controle, herdando o textbox =)
I love OOP
Eu ja fiz algo semelhante e me atendeu muito bem =)
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 =)
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.
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).
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).
Tópico encerrado , respostas não são mais permitidas