禁用与当前应用程序相关的所有窗口

时间:2011-11-15 15:25:50

标签: c# modal-dialog

我有一个能够调用.net方法的主应用程序。我的.net方法启动一个显示模态形式的新线程。

现在我的.net方法需要在显示模态窗体时禁用主应用程序中的所有窗口。

我该怎么做?

我在想win32方法“GetWindow”,但后来我需要主应用程序表单的句柄。

在我的示例中,您会看到使用模式对话框调用方法的主应用程序。 当我在打开threadingform-dlg时单击主应用程序时,threadingform-dlg应该闪烁。

main app with modal dialog

4 个答案:

答案 0 :(得分:4)

使用表单的ShowDialog()功能代替Show()。它将自动生成表单模态。

我不知道它是禁用所有其他窗口还是仅禁用呼叫窗口,请尝试。

答案 1 :(得分:3)

你不应该从一个单独的线程中显示一个模态形式(你甚至不应该从一个线程中显示一个非模态形式)。而是从应用程序的主窗体中显示模式窗体。如果这需要移动你的一些代码,那就这样吧。

答案 2 :(得分:1)

您可以通过访问OpenForms属性来获取应用程序的所有打开窗口。

var forms = Application.OpenForms;

答案 3 :(得分:1)

foreach (Form openedForm in Application.OpenForms) {
    if (openedForm.GetType() == FormToClose) {
        openedForm.Hide();
    }
}