问题
- 这几天在优化程序的时候发现了一个问题,就是在MDI窗体中的子窗体被激活显示出来之后,总是被主窗体中的控件遮挡(各种控件)。解决的方法也试了很多但是都不是很满意,由于C#的WINFROM窗体没有SETPARENT的方法,所以很多东西都需要自己去编写,下面就贴一个至少让我感觉非常不错的方法吧。
解决办法
user32.dll
- user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息。
System.Runtime.InteropServices
System.Runtime.InteropServices 命名空间提供各种各样支持 COM interop 及平台调用服务的成员,此命名空间提供了多种类别的功能。
简单的来说,就是提供在窗体运行时的各种服务。
代码
- 了解了上面两种工具的大致意思,剩下的就是怎么解决问题了。代码如下:
using System.Runtime.InteropServices; '调用命名空间'
[DllImport("user32")]; '引用DLL'
public static extern int SetParent(int children,int parent); '''编写函数过程'''
'调用过程'
'这里默认MDI窗体为This'
form1 fm=new form1();
fm.MdiParent=this;
fm.show();
SetParent((int)fm.Handle,(int)this.Handle);
总结
- 其实还有一些其他的方法可以实现类似的效果,什么两个窗体合成啊、使用PANEL控件啊、设置控件图层啊之类的,但是在这种情况下都不能真正的实现这样的效果,不过方法还是要灵活运用的,不能学死。希望上面的方法对你在C#中的窗体制作有用。