2017-09-28 74 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); 
} 

這樣它應該工作

相關問題