1

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

4

3 回答 3

4

您继承自 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();
    }
}
于 2012-09-03T07:53:32.860 回答
2

试试这个代码:

CheckBox chkList1 = new CheckBox();
chkList1.CheckedChanged += new EventHandler(CheckBox_CheckedChanged);

protected void CheckBox_CheckedChanged(object sender, EventArgs e)
{
    // Do your stuff
}
于 2012-09-03T05:19:52.730 回答
2

试试这个:

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);
        }
    }
于 2012-09-03T07:20:16.373 回答