none
Disparar evento cuando el valor de una propiedad de un control cambie RRS feed

  • 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 control

    Gracias de Antemano

     

     


    Luis Y. Ramirez "Recuerda marcar la repuesta como VALIDA si te ha ayudado"
    viernes, 16 de diciembre de 2011 16:21

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 haces

    TextBoxCustom txtCustom = new TextBoxCustom();

    txtCustom.CambioTexto += new ChangedEventHandler(txtCustom_CambioTexto)

    de esa forma asocias el evento

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 16 de diciembre de 2011 16:48
  • 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"
    viernes, 16 de diciembre de 2011 18:19

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 haces

    TextBoxCustom txtCustom = new TextBoxCustom();

    txtCustom.CambioTexto += new ChangedEventHandler(txtCustom_CambioTexto)

    de esa forma asocias el evento

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 16 de diciembre de 2011 16:48
  • 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"
    viernes, 16 de diciembre de 2011 17:04
  • 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
    viernes, 16 de diciembre de 2011 17:09
  • 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"
    viernes, 16 de diciembre de 2011 17:18
  • el tema es que noto es que defines el nombre para el evento que ya existe

    porque no defines otro nombre ? como puse en el ejemplo

     

    saludos

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 16 de diciembre de 2011 17:22
  • 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"
    viernes, 16 de diciembre de 2011 17:35
  •  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"
    viernes, 16 de diciembre de 2011 18:11
  • 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"
    viernes, 16 de diciembre de 2011 18:19
  •  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

      NetBarControl

      TextEditor

    <
    viernes, 16 de diciembre de 2011 19:10
    Moderador