Principales respuestas
Disparar evento cuando el valor de una propiedad de un control cambie

Pregunta
-
Saludos, estoy agregar un evento a un control que estoy haciendo que hereda de TextBox, entonces lo que quiero es poder tener un evento publico que se dispare cuando la propiedad Text cambie de valor, tengo el siguiente codigo
public delegate void ChangedEventHandler(object sender, EventArgs e); public event ChangedEventHandler TextChanged; public virtual void OnTextChanged(EventArgs e) { if (TextChanged != null) TextChanged(this, e); }
pero no se como amarralo a la propiedad Text del controlGracias de Antemano
Luis Y. Ramirez "Recuerda marcar la repuesta como VALIDA si te ha ayudado"
Respuestas
-
hola
pero este codigo donde lo defines ?
porque si es dentro del control
public class TextBoxCustom : TextBox{ public delegate void ChangedEventHandler(object sender, EventArgs e); public event ChangedEventHandler CambioTexto; public virtual void OnTextChanged(EventArgs e) { if (CambioTexto!= null) CambioTexto(this, e); } }
ya tienes el evento especil, solo hacesTextBoxCustom txtCustom = new TextBoxCustom();
txtCustom.CambioTexto += new ChangedEventHandler(txtCustom_CambioTexto)
de esa forma asocias el evento
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Propuesto como respuesta Marvin E. PinedaModerator viernes, 16 de diciembre de 2011 16:55
- Marcado como respuesta Luis Y. Ramirez Castillo viernes, 16 de diciembre de 2011 18:20
-
lo he logrado hacer pero con otra propiedad y funcional al vuelo, aparentemente una propiedad no puede disparar dos eventos almenos eso es lo que creo
gracias
public string Hola
{
get { return _Hola; }
set
{
_Hola = value;
OnTextEditValueChanged(EventArgs.Empty);
}
}
private string _Hola;private void textBoxtEdit1_TextEditValueChanged(object sender, EventArgs e)
{
var text = (TextBoxtEdit)sender;
MessageBox.Show(text.Hola);
}
private void button1_Click(object sender, EventArgs e)
{
textBoxtEdit1.Hola = "Fiered event TextEditValueChanged";
}
Luis Y. Ramirez "Recuerda marcar la repuesta como VALIDA si te ha ayudado"- Marcado como respuesta Luis Y. Ramirez Castillo viernes, 16 de diciembre de 2011 18:20
- Editado Luis Y. Ramirez Castillo viernes, 16 de diciembre de 2011 18:20
Todas las respuestas
-
hola
pero este codigo donde lo defines ?
porque si es dentro del control
public class TextBoxCustom : TextBox{ public delegate void ChangedEventHandler(object sender, EventArgs e); public event ChangedEventHandler CambioTexto; public virtual void OnTextChanged(EventArgs e) { if (CambioTexto!= null) CambioTexto(this, e); } }
ya tienes el evento especil, solo hacesTextBoxCustom txtCustom = new TextBoxCustom();
txtCustom.CambioTexto += new ChangedEventHandler(txtCustom_CambioTexto)
de esa forma asocias el evento
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Propuesto como respuesta Marvin E. PinedaModerator viernes, 16 de diciembre de 2011 16:55
- Marcado como respuesta Luis Y. Ramirez Castillo viernes, 16 de diciembre de 2011 18:20
-
Ese codigo lo tengo dentro del control perfecto, pero donde escribo esto
TextBoxCustom txtCustom = new TextBoxCustom();
txtCustom.CambioTexto += new ChangedEventHandler(txtCustom_CambioTexto)
por que por ejemplo, cree el control lo coloco en un form y lo que quiero es programar ese evento en el form,
otra cosa como el evento sabe que la propiedad text cambio, para el dispararse?
Gracias
Luis Y. Ramirez "Recuerda marcar la repuesta como VALIDA si te ha ayudado" -
pero donde escribo esto
depende, si el control lo ubicas desde el diseñador, esta parte
TextBoxCustom txtCustom = new TextBoxCustom();
no hace falta, si lo creas dinamicamente entonces si
cree el control lo coloco en un form y lo que quiero es programar ese evento en el form,
entonce selecciona el control, presiona F4 para ver las propiedades, y en el solution explorer selecciona el boton amarillo en forma de rayo, veras los eventos
alli busca el evento que has creado y has doble click para que se cree el codigo
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
Perfecto eso lo se y muchas gracias, puedo ver el evento y programarlo pero cuando este evento se disparara?
codigo completo
public class TextBoxtEdit : TextBox
{
public delegate void TextEditValueEventHandler(object sender, EventArgs e);
public event TextEditValueEventHandler TextChanged;
public virtual void OnTextChanged(EventArgs e)
{
if (TextChanged != null)
TextChanged(this, e);
}
}en el formulario entonces
private void textBoxtEdit1_TextChanged_1(object sender, EventArgs e)
{
MessageBox.Show("Evento Disparado");
}pero no se dispara cuando la propiedad TextCambia y eso es lo que quiero
Gracias
Luis Y. Ramirez "Recuerda marcar la repuesta como VALIDA si te ha ayudado" -
-
ok lo he dejado asi y perdona es que no me habia fijado que el textbox tiene este evento
public delegate void TextEditValueEventHandler(object sender, EventArgs e);
public event TextEditValueEventHandler TextEditValueChanged;
public virtual void OnTextChanged(EventArgs e)
{
if (TextEditValueChanged != null)
TextEditValueChanged(this, e);
}en el form
private void textBoxtEdit1_TextEditValueChanged(object sender, EventArgs e)
{
MessageBox.Show("Ok");
}pero entonces vuelvo a preguntarte y perdona es que no he podido comer y me estoy friendo, como hago que este evento se dispare por ejemplo cuando en el textboxt yo escribo algo gracias
Luis Y. Ramirez "Recuerda marcar la repuesta como VALIDA si te ha ayudado" -
-
lo he logrado hacer pero con otra propiedad y funcional al vuelo, aparentemente una propiedad no puede disparar dos eventos almenos eso es lo que creo
gracias
public string Hola
{
get { return _Hola; }
set
{
_Hola = value;
OnTextEditValueChanged(EventArgs.Empty);
}
}
private string _Hola;private void textBoxtEdit1_TextEditValueChanged(object sender, EventArgs e)
{
var text = (TextBoxtEdit)sender;
MessageBox.Show(text.Hola);
}
private void button1_Click(object sender, EventArgs e)
{
textBoxtEdit1.Hola = "Fiered event TextEditValueChanged";
}
Luis Y. Ramirez "Recuerda marcar la repuesta como VALIDA si te ha ayudado"- Marcado como respuesta Luis Y. Ramirez Castillo viernes, 16 de diciembre de 2011 18:20
- Editado Luis Y. Ramirez Castillo viernes, 16 de diciembre de 2011 18:20
-
He echo esto en
public override string Text
{
get
{
return base.Text;
}
set
{
base.Text = value;
OnTextEditValueChanged(EventArgs.Empty);
}
}y no se dispara el evento
Luis Y. Ramirez "Recuerda marcar la repuesta como VALIDA si te ha ayudado"ok,
el set de la propiedad Text del textbox nunca se dispara, asi que lo mejor podria ser en este caso usar el metodo base OnTextChanged para disparar el evento que tu quieres.
ejemplo:
public class TextBoxEx : TextBox { public delegate void TextEditValueEventHandler(object sender, EventArgs e); public event TextEditValueEventHandler TextEditValueChanged; protected override void OnTextChanged(EventArgs e) { base.OnTextChanged(e); if (TextEditValueChanged != null) TextEditValueChanged(this, e); } }
Salu2,Marvin E. Pineda
ComboBoxMultiColumns <