如何将事件从usercontrol调用到主窗体

时间:2017-09-28 09:53:19

标签: c# winforms events user-controls

我有一个userControl,我有一个按钮,当我从userControl点击主窗体中的按钮时,我想调用事件。我这样做:

用户控件

public UserControlerConstructor()
{
    _button.Click += new EventHandler(OnButtonClicked);
}

public delegate void ButtonClickedEventHandler(object sender, EventArgs e);
public event ButtonClickedEventHandler OnUserControlButtonClicked;

private void OnButtonClicked(object sender, EventArgs e)
{
    // Delegate the event to the caller
    if (OnUserControlButtonClicked != null)
        OnUserControlButtonClicked(this, e);
}

表格

public Form1()
{            
    userControlInstance.OnUserControlButtonClicked += new EventHandler(OnUCButtonClicked);
}

private void OnUCButtonClicked(object sender, EventArgs e)
{
    throw new NotImplementedException();
}

它不起作用,因为当我单击表单时在表单代码中什么都不做,但它在userControl代码中没有。但是我想在表单代码中做。我不知道如何将userControl中的事件调用到表单。

2 个答案:

答案 0 :(得分:0)

那么现在我不知道你是否明确想要使用委托,不是吗?如果没有,你为什么不这样做:

public Form1()
    {            
        userControlInstance._button.Click += OnUCButtonClicked;
    }

private void OnUCButtonClicked(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }

答案 1 :(得分:0)

到目前为止,您的代码无法编译。您使用的是错误的事件处理程序类型。它应该显示以下编译器错误:

  

无法将EventHandler转换为ButtonClickedEventHandler

执行以下步骤:

1)将委托的声明放在课程UserControlerConstructor之外:

public delegate void ButtonClickedEventHandler(object sender, EventArgs e);

public partial class UserControlerConstructor: UserControl
{

1)然后在Form注册事件时更改处理程序的类型:

public Form1()
{            
    userControlInstance.OnUserControlButtonClicked += new ButtonClickedEventHandler(OnUCButtonClicked);
}

这种方式应该可行