C# Windows窗体:等待其他窗体关闭
我的情况是,C# Windows窗体:等待其他窗体关闭,c#,winforms,C#,Winforms,我的情况是,formA需要更新一些数据,但只有在formB关闭之后。有没有一个简单的方法可以做到这一点 private void newProjectButton_Click(object sender, EventArgs e) { NewProjectForm newProjectForm = new NewProjectForm(); newProjectForm.Show(); //wait for newProjectForm to close...
formA
需要更新一些数据,但只有在formB
关闭之后。有没有一个简单的方法可以做到这一点
private void newProjectButton_Click(object sender, EventArgs e)
{
NewProjectForm newProjectForm = new NewProjectForm();
newProjectForm.Show();
//wait for newProjectForm to close...
DataTable dt = Util.ToDataTable(ProjectParticipantTable.GetUserProjectsDetails(Util.currentUserId));
userProjectsDGV.DataSource = dt;
}
您必须使用
ShowDialog()
方法,并管理DialogResult
属性。为此,您必须在NewProjectForm的某些部分上设置对话框Result
集,这可以通过在按钮中设置属性来完成,也可以通过代码简单地设置属性。这将向父窗体激发DialogResult并关闭窗体
您可以这样做:
using(NewProjectForm newProjectForm = new NewProjectForm())
{
if(newProjectForm.ShowDialog() == DialogResult.OK)
{
DataTable dt = Util.ToDataTable(ProjectParticipantTable.GetUserProjectsDetails(Util.currentUserId));
userProjectsDGV.DataSource = dt;
}
}
您必须使用
ShowDialog()
方法,并管理DialogResult
属性。为此,您必须在NewProjectForm的某些部分上设置对话框Result
集,这可以通过在按钮中设置属性来完成,也可以通过代码简单地设置属性。这将向父窗体激发DialogResult并关闭窗体
您可以这样做:
using(NewProjectForm newProjectForm = new NewProjectForm())
{
if(newProjectForm.ShowDialog() == DialogResult.OK)
{
DataTable dt = Util.ToDataTable(ProjectParticipantTable.GetUserProjectsDetails(Util.currentUserId));
userProjectsDGV.DataSource = dt;
}
}
如果不想使用模态showdialog模式,也可以使用此方法
private void newProjectButton_Click(object sender, EventArgs e)
{
NewProjectForm newProjectForm = new NewProjectForm();
newProjectForm.FormClosed += NewProjectForm_FormClosed;
newProjectForm.Show();
}
private void NewProjectForm_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e)
{
////will run when new form is closed
DataTable dt = Util.ToDataTable(ProjectParticipantTable.GetUserProjectsDetails(Util.currentUserId));
userProjectsDGV.DataSource = dt;
}
如果您只需要一个单例,则将newProjectForm变量设置为静态单例。如果您不想使用模态showdialog模式,也可以使用这种方法
private void newProjectButton_Click(object sender, EventArgs e)
{
NewProjectForm newProjectForm = new NewProjectForm();
newProjectForm.FormClosed += NewProjectForm_FormClosed;
newProjectForm.Show();
}
private void NewProjectForm_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e)
{
////will run when new form is closed
DataTable dt = Util.ToDataTable(ProjectParticipantTable.GetUserProjectsDetails(Util.currentUserId));
userProjectsDGV.DataSource = dt;
}
如果您只需要一个单例,那么将newProjectForm变量设为静态单例。您是否在寻找
ShowDialog
?我猜formB
不是模态的?这似乎是一个太明显的解决方案。正如Reza建议的那样,将Show()
更改为ShowDialog()
在关闭newProjectForm
之前,您将无法对当前打开的其他表单执行任何操作。这非常简单谢谢你在找ShowDialog
?我猜formB
不是模态的?这似乎是一个太明显的解决方案。正如Reza建议的那样,将Show()
更改为ShowDialog()
在关闭newProjectForm
之前,您将无法对当前打开的其他表单执行任何操作。这非常简单谢谢@RezaAghaei你明白了。我更新了我的答案,以跟上好消息practices@RezaAghaei你明白了。我更新了我的答案,以跟上良好实践