【发布时间】:2019-03-04 09:10:29
【问题描述】:
我有一个FormA,我可以从它打开FormB,如下所示:
FormB B = new FormB();
FormB.ShowDialog();
在FormB 中,我在try catch 块中有一些代码,当它抛出异常时,FormB 被关闭。
private void func()
{
try
{
// some code
DialogResult = DialogResult.Ok;
throw new Exception("Test exception")
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
看看那两行代码。当 DialogResult 赋值高于异常抛出时,表单在异常后关闭。
反之亦然,表单未关闭。那么有人可以解释这种行为吗?
【问题讨论】:
-
当您说关闭时,您的意思是“它从视图中消失了”吗?如果是这样,这就是我所期望的 - 当您设置
DialogResult时,您要求根据文档隐藏表单 - docs.microsoft.com/en-us/dotnet/api/… 。为什么你不期望它会那样做? -
因为
DialogResult=DialogResult.Ok将关闭表单。如果它低于异常抛出,它将不会被执行。似乎是正常行为。 -
我认为从技术上讲它隐藏了@J.vanLangen 的形式。
-
在您的代码示例中,表单应始终关闭,因为您在引发异常之前设置了 DialogResult。您是说使用此代码表单不会关闭?
-
您可以移动
DialogResult相关代码并检查到Finally块。无论如何都会被执行。
标签: c# winforms exception dialogresult