Windows窗体仅在ShowDialog()调用时引发异常

时间:2013-04-30 13:45:52

标签: c# winforms autocad-plugin

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

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

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

引发的异常

这是正常的??? Show()方法真的意味着不要抛出咒语??? 或者是来自Autocad Plug-in中的表格的一些奇怪的错误


一些代码(我觉得它没用,但它有用)

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.
    }
}

1 个答案:

答案 0 :(得分:1)

ShowDialog()停止执行调用类/表单。 Show()没有。我希望你在调用类/表单中有一个catch-block,它处理了Exception,因此没有显示

示例:

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中显示异常