C# MDI 子窗体被父窗体Panel挡住

Return0623360 2015-03-11 04:21:43
父窗体上有Panel控件(panel上放置别的有用的控件),打开子窗体后,子窗体却会被这个Panel挡住.请问有什么解决方法吗?
当我把Panel控件去掉后,子窗口也是位于父窗口的下面,已经把TopMost属性置为true,但还是位于下面,怎么破?
网上使用如下方法可以解决:
using System.Runtime.InteropServices;

[DllImport("user32")]
public static extern int SetParent(int hWndChild, int hWndNewParent);//这两句应该放在那儿???

Form2 f2 = new Form2();
f2.MdiParent = this;
f2.Show();
SetParent((int)f2.Handle, (int)this.Handle);

我试了一下,怎么就不行咧?
[DllImport("user32")]
public static extern int SetParent(int hWndChild, int hWndNewParent);
这两句是干啥子的?不太懂,菜鸟一枚,望解答。。。
...全文
407 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-03-16
  • 打赏
  • 举报
回复
引用 6 楼 u012558127 的回复:
布局?有没有相关的参考资料或教程可以提高在C#设计界面的布局思考,推荐一下吧!要学的东西太多了。。。
我觉得布局问题,你应该请教专业的美工 怎么样看起来美观,用起来舒服 不能光从编码的角度考虑
於黾 2015-03-16
  • 打赏
  • 举报
回复
比如,如果想好了要放2个panel,每次只显示其中1个,这时可以用用户控件 或者要显示3个panel,并列显示,内容一样,也可以用用户控件 现在楼主想放2个panel,同时都显示在正中间,那一定是要其中一个遮挡另一个了,这时你换成什么,也一样是一个遮挡另一个
於黾 2015-03-16
  • 打赏
  • 举报
回复
引用 5 楼 duanzi_peng 的回复:
[quote=引用 4 楼 Z65443344 的回复:] [quote=引用 3 楼 duanzi_peng 的回复:] 别用MDI窗体了,子窗体 用成 用户控件吧。
布局的问题如果不解决,子窗体到底用什么都一样,最终互相遮挡是避免不了的[/quote] 让他用用户控件 就是为解决 布局的问题。[/quote] 用户控件只是用来解决布局问题的一种手段,它代替不了布局的设计 如果从设计页面开始,就没想明白该如何布局,用什么控件都一样不会摆放的
Return0623360 2015-03-12
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
布局不合理+1 如果你panel里没有什么有用的东西 可以这样做: Form2 f2 = new Form2(); f2.MdiParent = this; panel1.Controls.Add(f2); f2.Show(); 这样就把f2放到panel里了,起码不会被panel遮住了 但是如果它遮住了panel里的控件,也是很头疼的一个问题 不要老纠结到底谁在上谁在下,先把想怎么布局弄明白,再实现,而不是先写了代码,才发现不是那么回事
布局?有没有相关的参考资料或教程可以提高在C#设计界面的布局思考,推荐一下吧!要学的东西太多了。。。
exception92 2015-03-12
  • 打赏
  • 举报
回复
引用 4 楼 Z65443344 的回复:
[quote=引用 3 楼 duanzi_peng 的回复:] 别用MDI窗体了,子窗体 用成 用户控件吧。
布局的问题如果不解决,子窗体到底用什么都一样,最终互相遮挡是避免不了的[/quote] 让他用用户控件 就是为解决 布局的问题。
於黾 2015-03-12
  • 打赏
  • 举报
回复
引用 3 楼 duanzi_peng 的回复:
别用MDI窗体了,子窗体 用成 用户控件吧。
布局的问题如果不解决,子窗体到底用什么都一样,最终互相遮挡是避免不了的
exception92 2015-03-12
  • 打赏
  • 举报
回复
别用MDI窗体了,子窗体 用成 用户控件吧。
於黾 2015-03-11
  • 打赏
  • 举报
回复
布局不合理+1 如果你panel里没有什么有用的东西 可以这样做: Form2 f2 = new Form2(); f2.MdiParent = this; panel1.Controls.Add(f2); f2.Show(); 这样就把f2放到panel里了,起码不会被panel遮住了 但是如果它遮住了panel里的控件,也是很头疼的一个问题 不要老纠结到底谁在上谁在下,先把想怎么布局弄明白,再实现,而不是先写了代码,才发现不是那么回事
software_artisan 2015-03-11
  • 打赏
  • 举报
回复
反过来,如果panel被你的Mdi窗体挡住了呢?恐怕结果更糟糕吧。这个问题不是谁在上面的问题,而是你布局不合理的问题。

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧