2010-10-23 72 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(); 
} 
相关问题