【发布时间】:2011-08-17 12:06:53
【问题描述】:
我开发了一个自定义控件,其作用类似于组框,组标签上带有一个复选框。这个想法是,一旦取消选中该复选框,该组中的所有控件都将被禁用。
我需要公开 Check changed 事件,以便在需要时可以执行外部操作。我还公开了 Check 状态已更改。
目前,当使用该控件时,当组中的任何控件失去焦点时,它会更改检查状态。
当我处理检查更改事件时,是否应该为任何外部处理程序重新触发该事件?
定义的事件:
/// <summary>
/// Event to forward the change in checked flag
/// </summary>
public event EventHandler CheckedChanged;
/// <summary>
/// Event to forward the change in checked state of the checkbox
/// </summary>
public event EventHandler CheckStateChanged;
事件处理代码:
private void chkBox_CheckedChanged(object sender, EventArgs e)
{
// Disable the controls within the group
foreach( Control ctrl in this.Controls )
{
if( ctrl.Name != "chkBox" && ctrl.Name != "lblDisplay" )
{
ctrl.Enabled = this.chkBox.Checked;
}
}
// Now forward the Event from the checkbox
if (this.CheckedChanged != null)
{
this.CheckedChanged(sender, e);
}
}
private void chkBox_CheckStateChanged(object sender, EventArgs e)
{
// Forward the Event from the checkbox
if( this.CheckStateChanged != null )
{
this.CheckStateChanged( sender, e );
}
}
【问题讨论】:
-
这看起来是正确的。有什么问题?
-
当用户输入或更改任何字段时,组中的控件将被禁用。然后他们必须重新启用该组并移动到下一个控件。
标签: c# winforms custom-controls