工作中遇到多个 WindowsFormsHost 包装的控件叠加顺序的调整问题,用了 BingToFront 和 BringToBack,不起效。后来在研究 AvalonDock 控件源码时发现其内部类似问题的处理是调用 Win32 的一个API(BringWindowToTop)解决的。效仿之,解决了我的问题。
函数定义如下:
1 [DllImport("user32.dll")] 2 [return: MarshalAs(UnmanagedType.Bool)] 3 public static extern bool BringWindowToTop(IntPtr hWnd);
hWnd 直接传WindowsFormsHost.Handle,试过传其内部定义的Panel.Handle,显示为一条白线(没深究)。每调用一次,会将当然句柄的WindowsFormsHost置于最上层,如果有其他WindowsFormsHost出现在当然控件位置会将其覆盖,如需一直保持在最上层,再次调用此函数即可。
工作笔记,欢迎讨论。
原文:https://www.cnblogs.com/lonelyxmas/p/10605371.html