LIMPAR TEXTBOX DENTRO DE TABCONTROL
Pessoal boa noite, a função abaixo funciona perfeitamente se usada com [txt-color=#0000f0]this.Controls[/txt-color] no lugar de [txt-color=#0000f0]tabControl1.Controls[/txt-color]
, em outras palavras só está pegando as textbox que estão fora do tabControl1.
Eu preciso saber como pegar/localizar todos os controles dentro de um tabControl1.Controls, alguém pode ajudar?
Como sempre desde já agradeço a todos que possam ajudar.
Se alguém conhece outro meio de verificar se as texbox estão em branco de maneira
mais didática a sugestão é bem vinda.
O que estou tentando fazer é evitar algo do tipo:
[txt-color=#e80000]if (txtNome.text == [Ô][Ô])
MessageBox.Show([Ô]Campos obrigatórios não foram preenchidos![Ô]);[/txt-color]
para cada texbox que tiver que conferir antes do cadastro.
, em outras palavras só está pegando as textbox que estão fora do tabControl1.
Eu preciso saber como pegar/localizar todos os controles dentro de um tabControl1.Controls, alguém pode ajudar?
foreach (Control c in tabControl1.Controls)
{
if (c is TextBox && c.Tag.ToString() == [Ô]obrigatorio[Ô] && c.Text == [Ô][Ô])
MessageBox.Show([Ô]Campos obrigatórios não foram preenchidos![Ô]);
}
Como sempre desde já agradeço a todos que possam ajudar.
Se alguém conhece outro meio de verificar se as texbox estão em branco de maneira
mais didática a sugestão é bem vinda.
O que estou tentando fazer é evitar algo do tipo:
[txt-color=#e80000]if (txtNome.text == [Ô][Ô])
MessageBox.Show([Ô]Campos obrigatórios não foram preenchidos![Ô]);[/txt-color]
para cada texbox que tiver que conferir antes do cadastro.
Eu já te passei isso outra vezes.
social.msdn.microsoft.com/Forums/pt-BR/b40a9671-f4c6-424b-bf0d-08f0848626cf/limpar-todos-os-campos-tabcontrol-c?forum=vscsharppt
Ou isso:
public void Limpar_texto(Form frm)
{
foreach (Control item in frm.Controls)
{
if (item is TabControl)
{
foreach (TabPage page in ((TabControl)item).TabPages)
{
foreach (Control control in page.Controls)
{
if (control is TextBox)
control.Text = [Ô][Ô];
}
}
}
}
}
social.msdn.microsoft.com/Forums/pt-BR/b40a9671-f4c6-424b-bf0d-08f0848626cf/limpar-todos-os-campos-tabcontrol-c?forum=vscsharppt
Ou isso:
SeuTabControl.Controls.Clear()
JABA,
O que preciso é algo para identificar uma textbox cujo a Tag seja igual a obrigatório
e que a mesma esteja vazia, tentei adaptar seu código da seguinte maneira:
Mas não acontece nada.
Sim meu amigo, a algum tempo atrás logo quando comecei a estudar C#
e é justamente nesse código que estou me inspirando para criar essa função que
até o presente momento só funciona nas textbox's que não estão no tabControl
O que preciso é algo para identificar uma textbox cujo a Tag seja igual a obrigatório
e que a mesma esteja vazia, tentei adaptar seu código da seguinte maneira:
foreach (Control item in this.Controls)
{
if (item is TabControl)
{
foreach (TabPage page in ((TabControl)item).TabPages)
{
foreach (Control c in page.Controls)
{
if (c is TextBox && c.Tag.ToString() == [Ô]obrigatorio[Ô] && c.Text == [Ô][Ô])
MessageBox.Show([Ô]Campos obrigatórios não foram preenchidos![Ô]);
}
}
}
}
Mas não acontece nada.
Citação::
Eu já te passei isso outra vezes.
Sim meu amigo, a algum tempo atrás logo quando comecei a estudar C#
e é justamente nesse código que estou me inspirando para criar essa função que
até o presente momento só funciona nas textbox's que não estão no tabControl
Coloque um BreakPoint e vai vendo quais controles ele está verificando. Tem que ver onde que ele sai do loop.
Ele passa por todas as texbox mas não faz nada, inclusive coloquei:
só pra ver se limpava mas nada acontece
if (c is TextBox)
c.Text = [Ô][Ô];
só pra ver se limpava mas nada acontece
Acho que este link pode ajudar:
http://stackoverflow.com/questions/10728300/check-if-control-is-textbox-within-tabcontrol
http://stackoverflow.com/questions/10728300/check-if-control-is-textbox-within-tabcontrol
Se está chegando nas TextBoxs, então o problema deve ser com alguma comparação. Tente algo como:
if (c is TextBox && c.Tag.ToString() == [Ô]obrigatorio[Ô] && string.IsNullOrWhiteSpace(c.text))
JABA,
não acontece nada, usei o código exatamente como você passou mas as
textbox não são limpas:
Testei dessa forma porque se funcionasse seria mais fácil para adaptar
para o que pretendo...
não acontece nada, usei o código exatamente como você passou mas as
textbox não são limpas:
private void Form1_Load(object sender, EventArgs e)
{
Limpar_texto(this);
}
public void Limpar_texto(Form frm)
{
foreach (Control item in frm.Controls)
{
if (item is TabControl)
{
foreach (TabPage page in ((TabControl)item).TabPages)
{
foreach (Control control in page.Controls)
{
if (control is TextBox)
control.Text = [Ô][Ô];
}
}
}
}
}
Testei dessa forma porque se funcionasse seria mais fácil para adaptar
para o que pretendo...
Citação::
Acho que este link pode ajudar:
http://stackoverflow.com/questions/10728300/check-if-control-is-textbox-within-tabcontrol
Vou testar aqui professor...
O que eu faria: Um método recursivo que retorne todos os controles de um tipo independente de estar dentro de um container, em um List<T>, assim, posso usar uma expressão lambda. Mais ou menos assim:
E para usar esse método:
public IEnumerable<Control> GetAll(Control control, Type type)
{
var controls = control.Controls.Cast<Control>();
return controls.SelectMany(ctrl => GetAll(ctrl, type))
.Concat(controls)
.Where(c => c.GetType() == type);
}
E para usar esse método:
foreach (TextBox item in this.GetAll(this, typeof(TextBox)).Where(c => c.Tag.ToString() == [Ô]obrigatorio[Ô]))
{
//aqui faça o que quiser com [Ô]item[Ô], ele vai ser um textbox que contém a [Ô]obrigatorio[Ô] na tag
MessageBox.Show(item.Name);
}
Você pode até mesmo usar o método GetAll acima, como um método de extensão que se aplicaria à qualquer form que você criar no seu projeto. Além disso, ele serve para buscar por qualquer tipo de controle e fazer com eles o que quiser. Para usar esse método com um método de extensão, seria assim:
Para usar, é a mesma coisa, mas ele estará disponÃvel em qualquer form do seu projeto. Uma correção, no uso: a propriedade Tag pode estar null, por isso, usamos um operador [Ô]short-circuit[Ô] para testar isso, além de métodos ToUpper(), para equiparar o case, assim, você pode escrever [Ô]obrigatorio[Ô], ou [Ô]OBRIGATORIO[Ô], ou [Ô]ObRiGaToRIO[Ô] que o teste vai funcionar da mesma maneira:
public static class Extensions
{
public static IEnumerable<Control> GetAll(this Form form, Control control, Type type)
{
var controls = control.Controls.Cast<Control>();
return controls.SelectMany(ctrl => form.GetAll(ctrl, type))
.Concat(controls)
.Where(c => c.GetType() == type);
}
}
Para usar, é a mesma coisa, mas ele estará disponÃvel em qualquer form do seu projeto. Uma correção, no uso: a propriedade Tag pode estar null, por isso, usamos um operador [Ô]short-circuit[Ô] para testar isso, além de métodos ToUpper(), para equiparar o case, assim, você pode escrever [Ô]obrigatorio[Ô], ou [Ô]OBRIGATORIO[Ô], ou [Ô]ObRiGaToRIO[Ô] que o teste vai funcionar da mesma maneira:
foreach (TextBox item in this.GetAll(this, typeof(TextBox))
.Where(c => c.Tag!= null && c.Tag.ToString().ToUpper() == [Ô]obrigatorio[Ô].ToUpper()))
{
MessageBox.Show(item.Name);
}
Tópico encerrado , respostas não são mais permitidas