【发布时间】:2012-09-19 17:57:18
【问题描述】:
在一个多项目解决方案中,我有一个带有 2 个表单的启动 WinForms 项目,只要显示子表单在我的主表单中继续执行,就会期望 DialogResult。
var form2 = new ThisNameSpace.FormChild();
var dResult = form2.ShowDialog(this);
if(dResult == DialogResult.OK)
{
// Do some work
}
else
{
// Do other work
}
由于某种原因,我不得不将子窗体移动到另一个项目中。我在我的主启动表单项目中引用了新项目的 dll,但我现在无法返回对话框结果。当我的子窗体关闭时,主窗体的 FormClosing 事件将使用 CloseReason.None 引发,并且应用程序退出。我该如何解决这个问题?
【问题讨论】:
-
无法返回对话结果是什么意思。
var dResult = form2.ShowDialog(this);还能编译吗?或者你的意思是你的应用程序崩溃了?如何关闭子窗体,窗口标题中关闭按钮的确定按钮? -
我的错,当
CloseReason是CloseReason.None在某些情况下通过使用空参数(CloseReason.None)调用FormClosing事件时,我强行关闭了我的主表单。我现在以不同的关闭原因提高孩子的FormClosing事件,并在我的主要表单中取消FormClosingEventArgs。仍然为什么FormClosing在具有特定CloseReason的子窗体上引发FormClosing事件在具有CloseReason = CloseReason.None的主窗体上引发? -
你的意思是你明确提出
FromClosing?这不是你应该这样做的,你应该打电话给Close。您也没有回答用户、确定按钮或关闭按钮如何关闭表单。当您调用ShowDialog时,您会打开一个模态对话框,并且用户应该关闭它。你在哪里提出这个事件,为什么? -
是的,当按下子表单上的 OK 按钮并将表单的
DialogResult设置为 OK 时,我现在使用CloseReason = None调用FormClosing。如果用户单击关闭按钮 (CloseReason = UserClosing),我将表单的DialogResult设置为Cancel。 -
你做错了,看下面的答案。
标签: c# winforms formclosing