如何在WinForms自定义控件中公开事件

时间:2011-08-17 12:06:53

标签: c# winforms custom-controls

我开发了一个自定义控件,其作用类似于组框,并在组标签上显示复选框。这个想法是,一旦取消选中复选框,组中的所有控件都将被禁用。

我需要公开Check changed事件,以便在需要时可以执行外部操作。我也暴露了检查状态的变化。

目前,当使用该控件时,如果组中的任何控件都松散焦点,它将更改检查状态。

当我处理check change事件时,我是否应该为任何外部处理程序重新启动事件?

enter image description here enter image description here

定义的事件:

/// <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 );
    }
}

1 个答案:

答案 0 :(得分:1)

你快到了。您只需要在外部类中使用事件处理程序注册您的事件。

CheckedChanged += ExternalChkBox_CheckChanged;

private void ExternalChkBox_CheckChanged(object sender, EventArgs e)
{
    // External trigger
}