我有一个表格可以选择打开另一个表格(对话)。我希望在第二个窗口关闭时触发事件。第一种形式名为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();
}
我不确定该事件是否被识别为事件。我做错了什么?
答案 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
上注册Closed
和Form
个活动。您是否已注册,除非您的注册是在其他地方进行的?
答案 3 :(得分:0)
在致电addEmp.ShowDialog()
之前,您需要设置方法来处理Closing事件:
frmAddEmployee addEmp = new frmAddEmployee();
addEmp.Closing += addEmp_Closing;
addEmp.ShowDialogue();