我在我的应用程序中有一个表单,通过单击帮助按钮,它会使用show()函数打开一个帮助表单。当我使用showDialog()从同一主窗体打开另一个对话框时,将禁用帮助窗体。你有什么主意吗 ?我不想用show()....
打开对话框答案 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()打开一样,同时仍然可以启用和访问您的帮助表单。