showdialog会导致不必要的行为

时间:2009-09-03 11:58:54

标签: c#

我在我的应用程序中有一个表单,通过单击帮助按钮,它会使用show()函数打开一个帮助表单。当我使用showDialog()从同一主窗体打开另一个对话框时,将禁用帮助窗体。你有什么主意吗 ?我不想用show()....

打开对话框

2 个答案:

答案 0 :(得分:8)

ShowDialog的重点在于它以模态的方式打开它,即它会阻止现有的表单。如果您不想要这种行为,请不要使用ShowDialog。为什么不想使用非模态Show方法?

编辑:如果您只想有效地“禁用”单个表单,我怀疑您需要在不同的UI线程上运行该表单。我认为模式对话框影响同一UI线程上的所有其他表单与调用ShowDialog的表单相同。 (毕竟,ShowDialog调用阻止了UI线程。)

答案 1 :(得分:3)

实现所需内容的一种简单方法是使用Show接受主窗体作为owner参数的重载来打开第二个对话框,并同时禁用主窗体,如下所示:

frmDialog myDialog = new frmDialog();
frmDialog.Show(this);
this.Enabled = false;

然后,在对话框窗体(frmDialog)的FormClosing事件中,重新启用主窗体,如下所示:

this.Owner.Enabled = true;

这将使对话框的行为就像使用ShowDialog()打开一样,同时仍然可以启用和访问您的帮助表单。