复合UserControls上的OnClick事件

时间:2010-06-23 15:08:02

标签: winforms user-controls

我想创建一个内置多个控件的UserControl。这些控件的行为应与单选按钮相似,即。例如,其中一个的状态会影响其他人的状态。为此,我希望能够处理来自父级的每个控件的OnClick事件。

一种解决方案可能是从子控件'UserControl方法调用父方法,以执行全局OnClick更改。类似的东西:

class Child : UserControl
{
    ...

    protected override void OnClick(EventArgs z_args)
    {
       // do own stuff

       ((PartentType)Parent).ChangeStatus(this);
    }

    ...
}

这是一个解决方案,但我想知道是否有更标准的优雅方式来解决这个问题。谢谢!

1 个答案:

答案 0 :(得分:2)

不,这非常糟糕,控件永远不应该依赖于具有特定的父级。以与Windows窗体控件相同的方式执行此操作:如果父母可能感兴趣的某些有趣事情然后引发事件:

    public event EventHandler StatusChanged;

    public int Status {
        get { ... }
    }

    protected override void OnClick(EventArgs z_args) {
        // do own stuff
        //...
        var handler = StatusChanged;
        if (handler != null) handler(this, EventArgs.Empty);
    }

考虑将事件引发代码放在Status属性的私有setter中。