为自定义复选框生成OnCheckedChanged

时间:2012-09-03 05:13:20

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

我有一个继承自System.Windows.Forms.Control的自定义复选框控件 它没有CheckedChanged事件。我想实现CheckedChange和dot net native CheckBox一样。我该怎么办呢?

3 个答案:

答案 0 :(得分:4)

你继承自Control,而不是CheckBox,因此解决方案类似于Frigik提出的解决方案,但并不完全是那个。

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

public event EventHandler CheckedChanged;

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

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

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

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

答案 1 :(得分:2)

试试这段代码:

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

protected void CheckBox_CheckedChanged(object sender, EventArgs e)
{
    // Do your stuff
}

答案 2 :(得分: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);
        }
    }