【问题标题】:generate OnCheckedChanged for custom checkbox为自定义复选框生成 OnCheckedChanged
【发布时间】:2024-04-24 15:20:02
【问题描述】:

我有一个继承自 System.Windows.Forms.Control 的自定义复选框控件 并且它没有 CheckedChanged 事件。我想实现与 dot net native CheckBox 相同的 CheckedChange。怎样才能做好呢?

【问题讨论】:

    标签: c# user-controls event-handling controls


    【解决方案1】:

    你是继承自Control,而不是CheckBox,所以解决方案与Frigik提出的方案类似,但又不完全一样。

    首先你必须在你的类中定义事件,即:

    public event EventHandler CheckedChanged;
    

    通过这种方式,每个使用您的控件的开发人员都可以订阅/取消订阅该事件。这还不够,因为事件永远不会被触发。为此,您必须定义一个方法来触发它,并在控件状态发生变化时调用此方法:

    private void RaiseCheckedChanged()
    {
        if (CheckedChanged!= null)
            CheckedChanged(this, EventArgs.Empty);
    }
    

    调用此方法的位置取决于控件的结构。例如,如果您有一个属性 Checked,您可以在其设置器中调用该方法:

    public bool Checked
    {
        get { return _checked; }
        set 
        { 
            _checked = value; 
            RaiseCheckedChanged();
        }
    }
    

    【讨论】:

      【解决方案2】:

      试试这个代码:

      CheckBox chkList1 = new CheckBox();
      chkList1.CheckedChanged += new EventHandler(CheckBox_CheckedChanged);
      
      protected void CheckBox_CheckedChanged(object sender, EventArgs e)
      {
          // Do your stuff
      }
      

      【讨论】:

      • 谢谢 Krunal,但我想你不明白我的意思。我想在我的控件的事件列表中定义“CheckedChanged”事件,当程序员想要在 OnCheckedChange 中编写他们的代码时,他们可以这样做
      • 假设您没有“CheckedChanged”事件并且您需要它。不幸的是,System.Windows.Forms.Control 在事件列表中没有“CheckedChanged”事件
      • 您的问题是告诉您在.cs 文件中生成了自定义复选框,并且您想在.cs 文件is it right 中生成复选框CheckedChanged?可以放上你试过的吗?
      【解决方案3】:

      试试这个:

      public class YourCheckBox:CheckBox
          {
              public event EventHandler<EventArgs> OnCheckedChangedCustom;
      
              protected override void OnCheckedChanged(EventArgs e)
              {
                  if (OnCheckedChangedCustom!=null)
                  {
                      OnCheckedChangedCustom(this, EventArgs.Empty);
                  }
                  base.OnCheckedChanged(e);
              }
          }
      

      【讨论】: