【发布时间】:2024-04-24 15:20:02
【问题描述】:
我有一个继承自 System.Windows.Forms.Control 的自定义复选框控件 并且它没有 CheckedChanged 事件。我想实现与 dot net native CheckBox 相同的 CheckedChange。怎样才能做好呢?
【问题讨论】:
标签: c# user-controls event-handling controls
我有一个继承自 System.Windows.Forms.Control 的自定义复选框控件 并且它没有 CheckedChanged 事件。我想实现与 dot net native CheckBox 相同的 CheckedChange。怎样才能做好呢?
【问题讨论】:
标签: c# user-controls event-handling controls
你是继承自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();
}
}
【讨论】:
试试这个代码:
CheckBox chkList1 = new CheckBox();
chkList1.CheckedChanged += new EventHandler(CheckBox_CheckedChanged);
protected void CheckBox_CheckedChanged(object sender, EventArgs e)
{
// Do your stuff
}
【讨论】:
.cs 文件中生成了自定义复选框,并且您想在.cs 文件is it right 中生成复选框CheckedChanged?可以放上你试过的吗?
试试这个:
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);
}
}
【讨论】: