0

我有一个像这样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 分配高于异常抛出时,表单在异常后关闭。

反之亦然,表格不会关闭。那么有人可以解释这种行为吗?

4

1 回答 1

-1

当您更改DialogResulta 的属性时Form(用 显示ShowDialog()),它将被关闭。在设置属性之前引发异常时,不会更改属性,因此不会关闭表单。当表单不显示为模式对话框时,单击关闭按钮(表单右上角带有 X 的按钮)会导致表单隐藏。


我会提供更多信息。就像文档说的那样:

窗体的对话框结果是窗体显示为模式对话框时返回的值。如果窗体显示为对话框,则使用 DialogResult 枚举中的值设置此属性会设置窗体的对话框结果的值,隐藏模式对话框,并将控制权返回给调用窗体。此属性通常由窗体上的 Button 控件的 DialogResult 属性设置。当用户单击 Button 控件时,分配给 Button 的 DialogResult 属性的值将分配给窗体的 DialogResult 属性。

资源

所以如果你在异常之前设置属性。它将触发对话框关闭。(它可能会向表单发送 WM_CLOSE 消息,这就是它不直接关闭的原因)

于 2018-09-28T11:27:40.320 回答