引用文章:《BuilderCoder Revit Parent Window 》
当我们使用模态窗体时,当焦点不在窗体上时,窗体会隐藏在所有层级后方,如果遇到不熟悉的用户会不停点击按钮,从而生成多个窗体。并且对于单一窗体的交互也不友好。
在网站中搜索,经常会告诉大家设置TopMost
但是这一操作会把窗体设置为最顶层,当我们使用其他应用程序,如:浏览器。窗体依旧显示在最上层不符合交互逻辑。
通过设置IWin32Window
将Revit设置为窗体的父窗体,但是我们通过
var rvtPtr = Process.GetCurrentProcess().MainWindowHandle;
仅可以获得他的焦点,此时我们需要继承IWin32Window
创建一个类,最后应用于Show()的函数中
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;
}
赋值:
var rvtPtr = Process.GetCurrentProcess().MainWindowHandle;
RegisterForm sign = new RegisterForm(new Point(rec.Left,rec.Top));
sign.ShowDialog(new WindowHandle(rvtPtr));
最终实现,点击Reivt时,隐藏于后方的窗体将会显示出来,并跟随Revit的进程自当关闭