2015-01-10 157 views
-1
中的事件

我遇到了從用戶控件中從表單訂閱事件的問題。無法訪問

的MainForm碼:

public partial class mainForm : Form 
{ 
    public mainForm() 
    { 
     InitializeComponent(); 
     UserControl menuView = new mnlib.mnlibControl(); 
     newWindow(menuView); 
    } 

    public void newWindow(UserControl control) 
    { 
     this.mainPanel.Controls.Clear(); 
     this.mainPanel.Controls.Add(control); 
    } 

    mnlibControl.OnLearnClick += new EventHandler(ButtonClick); //Error in this line 

    protected void ButtonClick(object sender, EventArgs e) 
    { 
     //handling.. 
    } 
} 

用戶控件碼:

public partial class mnlibControl : UserControl 
{ 
    public mnlibControl() 
    { 
     InitializeComponent(); 
    } 

    private void btn_beenden_Click(object sender, EventArgs e) 
    { 
     Application.Exit(); 
    } 

    public event EventHandler LearnClick; 
    private void btn_lernen_Click(object sender, EventArgs e) 
    { 
     if (this.LearnClick != null) 
      this.LearnClick(this, e); 
    } 
} 

現在,Visual Studio將標誌着 「mnlibControl.OnLearnClick ......」 行錯。 「mnlibControl」不會被發現,可能是一個缺少使用指令等。 所有這些代碼和兩種形式都位於同一個項目文件中。 我試了一下,像地獄一樣搜索,但只是找不到解決我的問題。

在UserControl窗體中有一個按鈕 - 當它是clicket時,它將觸發mainForm中的newWindow方法並打開另一個窗口。

我對我的問題的這種解決方案來源:How do I make an Event in the Usercontrol and Have it Handeled in the Main Form?

回答

2

。在你的組件沒有OnLearnClick。您需要訂閱LearnClick。您還需要在功能塊中訂閱。你也應該用具體類型(mnlib.mnlibControl),不UserControl

public mainForm() 
{ 
    InitializeComponent(); 
    mnlib.mnlibControl menuView = new mnlib.mnlibControl(); 
    menuView.LearnClick += new EventHandler(ButtonClick); 
    newWindow(menuView); 
} 
+0

憑藉的正是這種代碼它的工作原理,直到「LearnClick」在第5行報告說,將有對LearnClick沒有定義。 – dncrft

+0

@dncrft您需要使用'mnlib.mnlibControl'而不是'UserControl'。詳情請參閱最新的答案 – dotnetom

+0

最後,這個工程!謝謝!不知道爲什麼我使用UserControl而不是mnlib.mnlibControl ..類型的愚蠢;) – dncrft

2

您的代碼mnlibControl.OnLearnClick += new EventHandler(ButtonClick);必須在任何功能塊(即方法,屬性,...)。

+0

也在這種情況下,當我把代碼放在mainForm括號中,它說在mnlib.mnlibControl中沒有OnLearnClick的定義。如果我將「OnLearnClick」更改爲「LearnClick」,它說,我需要一個「mnlib.mnlibControl.LearnClick」的對象引用 – dncrft

1

你必須把此行的實際方法中:

mnlibControl.LearnClick += new EventHandler(ButtonClick); 

像這樣:

public mainForm() 
{ 
    InitializeComponent(); 
    UserControl menuView = new mnlib.mnlibControl(); 
    newWindow(menuView); 
    mnlibControl.OnLearnClick += new EventHandler(ButtonClick); 
} 
+0

這樣它告訴我,mnlibControl不會在實際上下文中:/ – dncrft

+0

@dncrft'mnlibControl' is一個類名。你必須使用實例。我的意思是,你的用戶控件在表單中的ID是什麼? – dario