WinForms:在其他应用程序的主窗口上显示模态窗体

11

是否可以在另一个进程的主窗口上显示WinForms模式窗体?

例如,我的WinForms应用程序由一个表单组成,该表单是模态的,覆盖在PID为x的另一个进程的主窗口上。


1
尝试过使用“TopMost=true”属性了吗? - Ritro
1
不完全是我想要的,但在某些情况下可以使用... - Harry13
1个回答

20

你可以将其显示为对话框,像这样:

Form1 frm = new Form1();
frm.ShowDialog(this);
frm.Dispose();

传递当前的IWin32Window或你想成为所有者的form,所以如果你是从父窗体上的按钮单击调用它,只需通过this来传递。

你希望能够获取另一个进程的IWin32Window,这是可能的,但我不知道是否可以在其上显示模式窗体。

var proc = Process.GetProcesses().Where(x => x.ProcessName == "notepad").First();
IWin32Window w = Control.FromHandle(proc.MainWindowHandle);

using (Form1 frm = new Form1())
{
    frm.ShowDialog(w);
}

如果可能的话,这就是它的工作原理,但是对我似乎不起作用。

这个链接可能会为这个问题提供更多信息:如何使子进程窗口在我的进程中以模态方式显示?


form.ShowDialog()会在另一个进程中打开它吗? - Adam K Dean
例如,系统上运行的第二个应用程序。不是同一应用程序中的模态表单。 - Harry13
这对我有用,谢谢。 如何使模态对话框在没有创建另一个普通非模态主窗体的情况下从主程序中创建? - Harry13
抱歉,我不明白你的问题? - Adam K Dean
我想创建一个WinForms应用程序,它只是在另一个应用程序上显示一个模态对话框,就像你之前描述的那样。现在,我创建了一个隐藏的主窗体,并将其提供给Application.Run()方法。这个主窗体会弹出模态对话框。那么,我如何从主方法中创建一个模态窗体呢? - Harry13
是的,这个可以工作,没有我想象中那么复杂;-) - Harry13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接