【问题标题】:Direct way for firing up some events when a boolean field changes?布尔字段更改时触发某些事件的直接方法?
【发布时间】:2011-08-10 07:24:17
【问题描述】:

不知道有没有办法在布尔字段从真变为假时直接控制一些事件?

类似于使用委托?

实际上我有很多用户输入控件(复选框、文本框等),我正在寻找一种方法来使用 foreach 和 control.disabled 的东西。

【问题讨论】:

    标签: c# events delegates boolean


    【解决方案1】:

    属性总是适合从内部触发事件:

    private bool check = false;
    public bool MyCheckboxChecked
    {
        get
        {
            return check;
        }
    
        set
        {
            if (check == true && value == false)
                MyEvent("MyCheckboxChecked is about to change from true to false!");
            check = value;
        }
    }
    

    如果您想监控控件的公共字段(即CheckBox.Checked),您可以随时连接它们已经提供的事件,例如CheckedChanged

    【讨论】:

    • 我相信您必须将 Rising 语句放在值更改语句之后..
    • 没错,最好在实际值更改之前引发 ValueChanging 事件,在赋值之后引发 ValueChanged 事件,就像框架本身一样。修正错字,谢谢。
    【解决方案2】:

    使用属性来设置字段值。在属性的 setter 中引发 PropertyChanged 事件。

    示例代码:

    bool Flag
    {
        get { return this.flag; }
        set
        {
            if (this.flag != value) 
            {
                this.flag = value;
                // Raise PropertyChanged event here ..
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      没错。如果你使用 WPF,你可以实现 INotifyPropertyChanged 接口和 Binding,非常方便。

      或者使用动作:

      private bool isIt;
      public Action YourAction{get; set;}
      
      public bool IsIt
      {
      get{return isIt;}
      set{isIt = value; if(YourAction != null) YourAction();}
      }
      

      【讨论】:

        【解决方案4】:

        当然有,在属性的 set 访问器上使用事件引发器,而不是直接更改成员变量...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-30
          相关资源
          最近更新 更多