VERIFICAR TODAS AS TEXTBOX VAZIAS
Pessoal olha eu aqui de novo (longo tempo ausente).
Estou me aventurando no C# e para não cometer os mesmos erros que cometia
antes gostaria da ajuda de vocês para vericar se existe alguma textbox vazia.
Ao depurar o código abaixo percebo que o sistema não encontra nenhuma
textbox mesmo tendo 4, o que pode estar errado?
PS: é bom estar de volta....
Ah, só uma observação, o código acima é uma adaptação feita por mim deste aqui:
Estou me aventurando no C# e para não cometer os mesmos erros que cometia
antes gostaria da ajuda de vocês para vericar se existe alguma textbox vazia.
Ao depurar o código abaixo percebo que o sistema não encontra nenhuma
textbox mesmo tendo 4, o que pode estar errado?
private void cmdComentar_Click(object sender, EventArgs e)
{
if (!Validar(this))
{
MessageBox.Show([Ô]Campos obrigatórios não foram preechidos![Ô], [Ô]MyFistProject[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
private bool Validar(Control con)
{
int nulos = 0;
foreach (Control c in con.Controls)
{
if (c is TextBox)
{
if (c.Text == string.Empty)
nulos++;
}
}
return (nulos == 0);
}
}
PS: é bom estar de volta....
Ah, só uma observação, o código acima é uma adaptação feita por mim deste aqui:
private void ClearAllText(Control con)
{
foreach (Control c in con.Controls)
{
imgMembro.Image = Properties.Resources.Usuario;
if (c is TextBox)
((TextBox)c).Clear();
else
ClearAllText(c);
if (c is ComboBox)
((ComboBox)c).Text = string.Empty;
else
ClearAllText(c);
if (c is MaskedTextBox)
((MaskedTextBox)c).Clear();
else
ClearAllText(c);
}
}
Amigo tente:
private bool Validar(Control con)
{
foreach (Control c in con.Controls)
{
if (c is TextBox)
{
if (c.Text == [Ô][Ô])
{return false;}
}
}
return true;
}
}
Se você quiser colocar os campos em sequência, tu vai ter que jogar a variável [txt-color=#e80000]nulos[/txt-color] para fora do método;
[txt-color=#e80000]int nulos = 0;[/txt-color]
private void Validar(Control con)
{
if (con.Controls.Count > 0) {
foreach (Control c in con.Controls)
{
if (c.Controls.Count == 0) {
if (c is TextBox) {
c.Text = string.Empty;
nulos++;
}
}
else {
Validar(c);
}
}
}
}
Dá pra matar com um só comando:
this.Controls.OfType<TextBox>().ToList().ForEach(t => t.Clear());
para essas verificações gosto de usar o erroprovider, já faço verificação até do correto preenchimento ;)
Citação:this.Controls.OfType<TextBox>().ToList().ForEach(t => t.Clear());
Esse código só funciona dentro de um único contêiner. Se ele tiver controles jogados dentro dos contêineres para uma mesma tela, não vai limpar.
Citação::
this.Controls.OfType<TextBox>().ToList().ForEach(t => t.Clear());
Esse código só funciona dentro de um único contêiner. Se ele tiver controles jogados dentro dos contêineres para uma mesma tela, não vai limpar.
Então, basta um método recursivo, aqui como um método de extensão:
public static IEnumerable<T> FindAllChildrenByType<T>(this Control control)
{
IEnumerable<Control> controls = control.Controls.Cast<Control>();
return controls.OfType<T>().Concat<T>(controls.SelectMany<Control, T>(ctrl => FindAllChildrenByType<T>(ctrl)));
}
E onde quiser o método funcionando:
this.Controls.OfType<TextBox>().ToList().ForEach(t => t.Clear());
foreach (Control item in this.Controls)
{
if (item.HasChildren)
item.FindAllChildrenByType<TextBox>().ToList().ForEach(t => t.Clear());
}
Isso vai limpar todos os textbox, de qualquer container.
Acho que o seu código ficou bem mais complexo, e o código abaixo, além de mais simples, possui praticamente a mesma quantidade de linhas.
public void LimparCampos(Control con)
{
foreach (Control c in con.Controls)
if (c.Controls.Count == 0)
{
if (c is TextBox)
c.Text = string.Empty;
}
else
LimparCampos(c);
}
Mas por ser um método de extensão, estará disponÃvel em todo e qualquer controle de todos os forms da aplicação.
Pessoal, obrigado a todos que contribuiram.
O código estava certo, usei o código do LuizComino
porque achei mais enchuto, só não estava funcionando
porque as textbox estavam dentro de um frame, vou abrir outro
tópico para entender isso.
O código estava certo, usei o código do LuizComino
porque achei mais enchuto, só não estava funcionando
porque as textbox estavam dentro de um frame, vou abrir outro
tópico para entender isso.
Tópico encerrado , respostas não são mais permitidas