最近用了WeifenLuo.WinFormsUI.Docking的控件,界面相当好看。但带来一个问题:
一个子窗体A是基于WeifenLuo.WinFormsUI.Docking的,改变其dock状态后,窗体句柄也变化了,估计是在鼠标拖曳完成过程中重新show时生成了新的句柄。但因为我在子窗体A中内嵌了另外一个程序的窗体,当子窗体A的句柄变化时,另一个程序窗体因找不到原句柄而退出。想了很多招也不能解决。包括:限制子窗体A不能改变dock状态(为fill状态),但双击其标题仍然可变为悬浮状态,句柄一样变了;也找不到鼠标拖曳改变dock状态的这个事件。请各位帮我想想办法。谢谢。
一个子窗体A是基于WeifenLuo.WinFormsUI.Docking的,改变其dock状态后,窗体句柄也变化了,估计是在鼠标拖曳完成过程中重新show时生成了新的句柄。但因为我在子窗体A中内嵌了另外一个程序的窗体,当子窗体A的句柄变化时,另一个程序窗体因找不到原句柄而退出。想了很多招也不能解决。包括:限制子窗体A不能改变dock状态(为fill状态),但双击其标题仍然可变为悬浮状态,句柄一样变了;也找不到鼠标拖曳改变dock状态的这个事件。请各位帮我想想办法。谢谢。
找到weifenluo的源码,将其中双击标题的函数修改,禁止变为浮动窗口,另外 不允许该窗体拖动改变dock状态。show的时候为fill方式。
虽然不完美,但总算部分实现。
你可以注册它的DockStateChanged事件,在停靠位置改变的时候,重新设置下你自己的窗体所记录的窗口句柄。
停靠的时候,会触发DockStateChanged事件,在这个事件里你可以知道该停靠位置对应的窗口句柄。
为什么会handle改变,有可能是那个控件重新创建了
有一款商业软件,用户需求是对其进行封装,简单的操作就能实现其复杂的功能。我用该软件自带的VBA语言实现了封装,但是想把它的运行限制到我的form中。
不知道您有什么好办法?