c#尝试在不同窗口关闭时触发事件

时间:2010-10-23 20:44:59

标签: c# events

我有一个表格可以选择打开另一个表格(对话)。我希望在第二个窗口关闭时触发事件。第一种形式名为frmMain(),另一种形式为frmAddEmployee()。继承人我所拥有的:  在frmMain()

//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 个答案:

答案 0 :(得分:4)

C#中的事件必须手动注册 - C#编译器不会仅根据方法名称自动将方法注册为事件处理程序。你需要:

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

事件的自动注册在ASP.NET中完成,Visual Basic具有Handles子句,但在C#中,您需要使用+=运算符来指定在事件发生时应调用某个方法发生。

答案 1 :(得分: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();
}

答案 2 :(得分:1)

您可以在Closing上注册ClosedForm个活动。您是否已注册,除非您的注册是在其他地方进行的?

答案 3 :(得分:0)

在致电addEmp.ShowDialog()之前,您需要设置方法来处理Closing事件:

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