Fórum Criar evento dinamicamente #13466
02/01/2010
0
Tenho um form, e utilizo um metodo recursivo pra validá-lo, com errorprovider.
Segue abaixo o metodo:
private void validaCamposBranco(Control control)
{
foreach (Control c in control.Controls)
{
if (c is TextBox)
{
if (c.Text.Trim() == "")
{
errorProvider1.SetError(c, ClassMessages.ErrorBlankValue);
}
else
errorProvider1.SetError(c, "");
}
ClassPersistStatic.sBlankValue += errorProvider1.GetError(c);
if (c.HasChildren)
validaCamposBranco(c);
}
}
Com isso eu verifico se todos meus textbox estão preenchidos.
Funciona corretamente.
O que eu gostaria de fazer é um evento Leave para esses textbox, validando ao tirar o foco do controle.
Mas eu gostaria de fazer dinâmicamente, pois além de serem muitos textbox (só nesse form tem uns 30) a validação seria a mesma.
E além disso, usando a validação acima, se eu adicionar mais 200 textbox ao meu form, eles serão validados automaticamente, eu não precisarei modificar meu código.
Como eu faço pra criar eventos dinâmicos?
Eu poderia utilizar o foreach pra percorrer todos meus controles e adicionar o evento a eles, chamando a validação, mas não estou conseguindo.
Poderiam me dar uma ajuda?
Daniel Vieira
Curtir tópico
+ 0Posts
03/01/2010
Fabio Mans
using System.Windows.Forms; namespace MeuTextBox
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
} private void textBox1_Leave(object sender, EventArgs e)
{
if(textBox1.Text.Equals(""))
errorProvider1.SetError(this,"Campo em branco");
}
}
} Eu posso colocar n usercontrols no meu projeto, todos eles quando irão aprensentar a mensagem Campo em branco caso estejam em branco. Espero ter ajudado.
Gostei + 0
04/01/2010
Daniel Vieira
Esse projeto vai aparecer na minha toolbox, quando eu arrastar ele para o meu form ele vai validar meus textbox?
Mas nesse caso não vai validar pro controle chamado textbox1 apenas?
Gostei + 0
04/01/2010
Fabio Mans
Gostei + 0
04/01/2010
Daniel Vieira
eu tenho alguns componentes criados, mas eu faço manualmente, crio uma classe dando override no componente, como no exemplo abaixo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
namespace Materiais.Classes
{
public class doubleTextBox : TextBox
{
protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode == Keys.NumPad0 || e.KeyCode == Keys.NumPad1 || e.KeyCode == Keys.NumPad2
|| e.KeyCode == Keys.NumPad3 || e.KeyCode == Keys.NumPad4 || e.KeyCode == Keys.NumPad5
|| e.KeyCode == Keys.NumPad6 || e.KeyCode == Keys.NumPad7 || e.KeyCode == Keys.NumPad8
|| e.KeyCode == Keys.NumPad9
|| e.KeyCode == Keys.D0 || e.KeyCode == Keys.D1 || e.KeyCode == Keys.D2 || e.KeyCode == Keys.D3
|| e.KeyCode == Keys.D4 || e.KeyCode == Keys.D5 || e.KeyCode == Keys.D6 || e.KeyCode == Keys.D7
|| e.KeyCode == Keys.D8 || e.KeyCode == Keys.D9
|| e.KeyCode == Keys.Delete || e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return || e.KeyCode == Keys.Back
|| e.KeyCode == Keys.Tab
|| e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down
|| e.KeyCode == Keys.End || e.KeyCode == Keys.Home || e.KeyCode == Keys.PageDown || e.KeyCode == Keys.PageUp
|| e.KeyCode == Keys.Oemcomma || e.KeyCode == Keys.Decimal || e.KeyCode == Keys.OemPeriod)
{
e.SuppressKeyPress = false;
}
else
{
e.SuppressKeyPress = true;
}
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
if (e.KeyChar == '.')
e.KeyChar = ',';
}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
this.BackColor = Color.Yellow;
}
protected override void OnLostFocus(EventArgs e)
{
base.OnLostFocus(e);
this.BackColor = Color.Empty;
}
}
}
Eu faço manualmente, mas depois ele me cria o componente customizado.
Mas nesse componente eu não consegui trabalhar com eventos.
No seu exemplo eu conseguiria trabalhar com os eventos e inclusive ele viria com o error provider junto, seria por ae?
Gostei + 0
04/01/2010
Fabio Mans
Gostei + 0
04/01/2010
Daniel Vieira
Ja posto se tiver dificuldades, vou utilizar seu exemplo
Gostei + 0
08/01/2010
Fabio Mans
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)