none
Crear evento que se dispare cuando una variable bool cambia su valor

    Question

  • Buenas, una vez más acudo a este gran foro. Tengo en mi aplicación una variable bool hasChanged que la pongo a true cuando se hace alguna operación. Mi problema es que necesito saber si se puede crear un evento que se dispare cuando esa variable bool cambia de valor.

    He visto algo en esta dirección:

    http://www.daniweb.com/forums/thread192456.html

    La verdad que no entiendo muy bien que se hace ahí.

    Si alguien me puedo explicar como puedo crear ese evento sería de gran ayuda.

    Gracias de antemano!

    Monday, November 29, 2010 12:07 PM

Answers

  • hola

    el ejemplo del link esta perfecto, pero hay que conocer como funcionan los eventos para poder armarlo porque son varias partes las que necesitas apra poder hacerlo

    lo primero es definir el handler que usaras, esto lo haces por medio del delegado en la linea

    public delegate void boolChangeHandler(object sender, EventArgs e);

    esto define la firma del metodod el evento

    luego defines el eventos propiamente dicho, que usara el handler anterior

    public event boolChangeHandler boolChanged;

     

    despues desde donde quieras lanzarlo deberas usar las linea

    if (boolChanged != null)
    {
        boolChanged(this, new EventArgs() );
    }

    es importante preguntar por null, ya que sino lo haces puede que el el evento no tenga subscripciones y entonces falle la invocacion, preguntando por null te aseguras que alguien este subscripto y puedas lanxarlo sin problemas

    veras que se refencia al evento por el nombre boolChange, en el ejemplo no lo pusieron dos argumentos que han olvidado pasarle, por eso cuando lo invoque agregue el "this" y el "new EventArgs()", si hubieras definido el handler de esta forma

    public delegate void boolChangeHandler();

    ahi si se podria lanzar el evento sin parametros, usnado

    if (boolChanged != null)
    {
        boolChanged();
    }

    lo unico que resta es adjuntarse al evento, para esto desde otro lugar dodne queiras controlar el evento podrias hacer

    control.boolChanged += boolChangeHandler(control_boolChanged);

    private void control_boolChanged(object sender, EventArgs e){

    }

     

    veras que el metodo que se adjunta debe respetar el firma definoda en el delegate, o sea el delegate define la firma del evento, y el evento recibe las subscripciones de quienes quieren escucharlo cuando se dispare

    bueno espero esta explicacion sea de utilidad

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Monday, November 29, 2010 12:31 PM

All replies

  • hola

    el ejemplo del link esta perfecto, pero hay que conocer como funcionan los eventos para poder armarlo porque son varias partes las que necesitas apra poder hacerlo

    lo primero es definir el handler que usaras, esto lo haces por medio del delegado en la linea

    public delegate void boolChangeHandler(object sender, EventArgs e);

    esto define la firma del metodod el evento

    luego defines el eventos propiamente dicho, que usara el handler anterior

    public event boolChangeHandler boolChanged;

     

    despues desde donde quieras lanzarlo deberas usar las linea

    if (boolChanged != null)
    {
        boolChanged(this, new EventArgs() );
    }

    es importante preguntar por null, ya que sino lo haces puede que el el evento no tenga subscripciones y entonces falle la invocacion, preguntando por null te aseguras que alguien este subscripto y puedas lanxarlo sin problemas

    veras que se refencia al evento por el nombre boolChange, en el ejemplo no lo pusieron dos argumentos que han olvidado pasarle, por eso cuando lo invoque agregue el "this" y el "new EventArgs()", si hubieras definido el handler de esta forma

    public delegate void boolChangeHandler();

    ahi si se podria lanzar el evento sin parametros, usnado

    if (boolChanged != null)
    {
        boolChanged();
    }

    lo unico que resta es adjuntarse al evento, para esto desde otro lugar dodne queiras controlar el evento podrias hacer

    control.boolChanged += boolChangeHandler(control_boolChanged);

    private void control_boolChanged(object sender, EventArgs e){

    }

     

    veras que el metodo que se adjunta debe respetar el firma definoda en el delegate, o sea el delegate define la firma del evento, y el evento recibe las subscripciones de quienes quieren escucharlo cuando se dispare

    bueno espero esta explicacion sea de utilidad

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Monday, November 29, 2010 12:31 PM
  • Buenas, una vez más acudo a este gran foro. Tengo en mi aplicación una variable bool hasChanged que la pongo a true cuando se hace alguna operación. Mi problema es que necesito saber si se puede crear un evento que se dispare cuando esa variable bool cambia de valor.

    He visto algo en esta dirección:

    http://www.daniweb.com/forums/thread192456.html

    La verdad que no entiendo muy bien que se hace ahí.

    Si alguien me puedo explicar como puedo crear ese evento sería de gran ayuda.

    Gracias de antemano!


    luego de ver el ejemplo en el Link que muestras, definamos.

    si lo que tienes es una variable o propiedad dentro de un formulario o clase que deseas que su valor sea evaluado luego de ser cambiado o hacer algo adicional al ser cambiado su valor entonces, puedes hacer lo siguiente.

        private bool _variableA;
        private bool VariableA
        {
          get { return _variableA; }
          set 
          { 
            _variableA = value;
            VariableAChanged();
          }
        }
    
        void VariableAChanged()
        {
          MessageBox.Show("El valor de la variable 'VariableA' es " + VariableA.ToString());
        }

    y usando un boton para probar podriamos programar el evento click del boton para que haga el cambio de valor en la variable

        private void button2_Click(object sender, EventArgs e)
        {
          VariableA = !VariableA;
        }

    y no hay necesidad de crear delegados para probocar un evento ya que el uso es interno.

     

     

    Salu2,

     

     


    No le temas a la competencia, temele a tu propia incompetencia.
    Monday, November 29, 2010 2:59 PM