2017-09-28 41 views
-1

我有一个用户控件,我有一个按钮,我想在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调用事件到窗体。

+0

这个问题不是很清楚,但我明白你是要求在窗体控制中调用用户控件事件。这是对事件的限制,只有拥有班级的人才能知道在何处致电活动。您只能在订阅类中注册事件处理程序。 – praty

+0

无关:您为什么使用自定义代理?你可以使它成为'public EventHandler OnUserControlButtonClicked' – Fildor

+0

是的,编译器不会暂停它。 –

回答

0

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

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

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

到目前为止你的代码不能编译。您正在使用错误的事件处理程序类型。它应该显示以下编译器错误:

EventHandler cannot be converted to 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); 
} 

这样它应该工作

相关问题