引用文章:《BuilderCoder Revit Parent Window 》

当我们使用模态窗体时,当焦点不在窗体上时,窗体会隐藏在所有层级后方,如果遇到不熟悉的用户会不停点击按钮,从而生成多个窗体。并且对于单一窗体的交互也不友好。

在网站中搜索,经常会告诉大家设置TopMost但是这一操作会把窗体设置为最顶层,当我们使用其他应用程序,如:浏览器。窗体依旧显示在最上层不符合交互逻辑。

通过设置IWin32Window将Revit设置为窗体的父窗体,但是我们通过

1
var rvtPtr = Process.GetCurrentProcess().MainWindowHandle;

仅可以获得他的焦点,此时我们需要继承IWin32Window创建一个类,最后应用于Show()的函数中

1
2
3
4
5
6
7
8
9
10
11
12
public class WindowHandle:IWin32Window
{
private IntPtr _handle;

public WindowHandle(IntPtr h)
{
Debug.Assert(IntPtr.Zero!=h,"expected non-null window handle");

_handle = h;
}
public IntPtr Handle => _handle;
}

赋值:

1
2
3
var rvtPtr = Process.GetCurrentProcess().MainWindowHandle;
RegisterForm sign = new RegisterForm(new Point(rec.Left,rec.Top));
sign.ShowDialog(new WindowHandle(rvtPtr));

最终实现,点击Reivt时,隐藏于后方的窗体将会显示出来,并跟随Revit的进程自当关闭