2010-10-23 68 views
0

我有一個窗體可以打開另一個窗體(對話框)。當第二個窗口關閉時,我想要一個事件觸發。第一種形式被命名爲frmMain(),另一種形式是frmAddEmployee()。繼承人我有:在frmMain ()c#試圖讓一個事件在另一個窗口關閉時觸發

//create and open the second window 
public void (object sender, EventArgs e) 
{ 
    frmAddEmployee addEmp = new frmAddEmployee(); 
    addEmp.ShowDialogue(); 
} 

//create event to handle addEmp being closed 
public void addEmp_Closing(object sender, EventArgs e) 
{ 
    PopulateEmployeeList(); 
} 

我不知道的情況下被認爲是一個事件。我究竟做錯了什麼?

回答

4

C#中的事件必須手動註冊--C#編譯器不會根據方法的名稱自動將方法註冊爲事件處理程序。您需要:

frmAddEmployee addEmp = new frmAddEmployee(); 
addEmp.Closing += addEmp_Closing; // Register event handler explicitly 
addEmp.ShowDialogue(); 

事件的自動註冊在做ASP.NET和Visual Basic具有Handles條款,但在C#中,你需要使用+=運營商指定事件發生時,有些方法應被調用。

+0

+1擊敗我吧! – 2010-10-23 20:53:28

+1

-1我揍了他一下...... teez在-1 :) – 2010-10-23 20:55:01

+1

@Aaron:我試圖用-1作爲smarty來揍你,但我不小心打了+1! :P – 2010-10-23 20:55:56

1

ClosingClosed事件,您可以在Form上註冊。你沒有註冊,除非你的註冊發生在別的地方?

0

致電前addEmp.ShowDialog()你需要設置你的方法來處理Closing事件:

frmAddEmployee addEmp = new frmAddEmployee(); 
addEmp.Closing += addEmp_Closing; 
addEmp.ShowDialogue(); 
2

假設ShowDialogue意味着ShowDialog的話,就說明形式模態,你並不需要一個事件處理程序:

//create and open the second window 
public void (object sender, EventArgs e) 
{ 
    frmAddEmployee addEmp = new frmAddEmployee(); 
    addEmp.ShowDialog(); 
    PopulateEmployeeList(); 
} 

如果你不顯示第二種形式模態,那麼你就可以顯示這樣的表格前,掛鉤事件處理程序:

public void (object sender, EventArgs e) 
{ 
    frmAddEmployee addEmp = new frmAddEmployee(); 
    addEmp.FormClosed += AddEmpClosed; 
    addEmp.Show(); 
} 

private void AddEmpClosed(object sender, FormClosedEventArgs e) 
{ 
    PopluateEmployeeList(); 
} 
相關問題