0

我有一个 Windows 窗体,里面有一些错误的代码(无论错误是什么,它们都是故意检查引发的异常)。

请记住,我没有使用 any try-catch,不在表格内部,也不在外部。我只是期待调试器抛出异常并停止运行。

当我使用 显示表单时ShowDialog(),抛出异常没有问题。当我使用 显示表单时Show(),不会引发任何异常。错误发生在代码执行期间,代码中断在应该引发异常的地方运行,但表单保持活动和功能,接受点击并正常运行所有事件。调试器不应该抛出表单引发的异常吗???

这正常吗???该Show()方法真的是为了不抛出异常???或者是 Autocad 插件中的表单中的一些奇怪的错误???


一些代码(我认为它没用,但它就在那里)

public void ShowMyForm(MyForm MyFormInst)
{ MyFormInst.Show(); } //here, the form doesn't raise exceptions when I click button1.

public void ShowMyFormModal(MyForm MyFormInst)
{ MyFormInst.ShowDialog(); } //here, the form raises exceptions when I click button1.

class MyForm : Form
{
    //initialize and blablabla

    private void button1_Click(object sender, EventArgs e)    
    {
        double[] Arrr = new double[] {1, 2, 3};
        double Numb = Arrr[4]; //yes, did this on purpose to force exceptions.
    }
}
4

1 回答 1

1

ShowDialog() 停止调用类/表单的执行。Show() 没有。我希望您在处理异常的调用类/表单中有一个捕获块,因此未显示

例子:

form1_click() {
  try {
  Form2 frm2=new Form2();
   frm2.Show();
  } catch {
   // Do Nothing
  }
}

没有显示任何东西,因为 Form1 中的 Catch

form1_click() {
  try {
  Form2 frm2=new Form2();
   frm2.ShowDialog();
  } catch {
   // Do Nothing
  }
}

如果里面没有异常处理,会显示Form2中的异常

于 2013-04-30T13:55:28.787 回答