【C#】MDI窗体中,将子窗体置于父窗体控件之上的方法

问题

  • 这几天在优化程序的时候发现了一个问题,就是在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#中的窗体制作有用。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值