想实现 在winform中 3个pannel的布局问题

wklilong 2016-09-22 02:34:16
如题,我想实现的效果是如下图。 所有的pannel 宽度都是 跟窗体一般大的。 窗体大pannel也跟着变大小,也就变小
我遇到的问题是 pannel1和pannel3 遮挡了pannel2
我没编写代码 就是用 dock设置的
不知道我想要的这种方式如何能弄出来
...全文
767 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
crystal_lz 2016-09-23
  • 打赏
  • 举报
回复
引用 5 楼 wklilong 的回复:
[quote=引用 1 楼 crystal_lz 的回复:]
panel1 dock.Top
panel3 dock.Bottom
panel2 dock.Fill

如果设置panel2 fill 的时候 发现他铺满整个窗体的时候 对着panel2 ctrl x ctrl v 就好了


你真是高手啊。 这个算不算是 vs的bug啊 就这么一弄就好了。
下边两个人的回复估计也是可以的 但是我没测试 那样还需要学习另一个控件[/quote]
这个不是 bug dock的效果和添加的顺序有关
而在【窗体.Designer.cs】文件中有你添加控件的时候自动生成的代码 而里面有这样的代码

你想想 假设 我有三个 button button1 button2 button3 我要他们三个都设置为 dock top
那么从上往下 他们应该是什么顺序? 谁最先被添加到窗体上 谁就在最上面假设我添加控件的顺序是 1 2 3 那么从上往下就是123而不会是321
就算我设置dock的顺序是 3 2 1 来设置的 但是最先被添加到窗体上的控件是1 所以就算你是先设置的3 但是此时3还没有被添加到窗体上
所以按照你给的图 你添加panel的顺序应该是 panel1 panel2 panel3
所以你设置dock的时候 1为top 这个没有问题 他会在顶上 3为bottom 他在底下也没有问题
可是2是第二个被添加进去的对于他而已 他被添加的时候 还没有panel3 的所以设置fill的时候 他不知道下面会有一个panel3 所以自然而然的他会把下面也占用了 不过按理来说 当panel3设置 为bottom的时候 应该会把panel2挤上去才对的这个我也不知道

叫你ctrl x是为了让你的panel2 从窗体上移除 然后在ctrl v把它重新添加到窗体上 这样他就是最后一个被加入的了 就不会有问题了
wklilong 2016-09-22
  • 打赏
  • 举报
回复
引用 1 楼 crystal_lz 的回复:
panel1 dock.Top panel3 dock.Bottom panel2 dock.Fill 如果设置panel2 fill 的时候 发现他铺满整个窗体的时候 对着panel2 ctrl x ctrl v 就好了
你真是高手啊。 这个算不算是 vs的bug啊 就这么一弄就好了。 下边两个人的回复估计也是可以的 但是我没测试 那样还需要学习另一个控件
  • 打赏
  • 举报
回复
修正图中的解释:
  • 打赏
  • 举报
回复
Panel如果不在一个容器内,随窗体变大时会出现相互覆盖的情况。
所以建议使用SplitContaier,我最近刚好做了一个和你差不多的窗体


splitContainer1设置填充窗体
splitContainer2设置填充在splitContainer1的Panel1
无需再设置Dock, Anchor
xian_wwq 2016-09-22
  • 打赏
  • 举报
回复
嵌套使用SplitContainer也可以实现: 1.先使用splitContainer把面板分成两部分 2. 在其中一个pannel中再使用splitContainer
crystal_lz 2016-09-22
  • 打赏
  • 举报
回复
panel1 dock.Top panel3 dock.Bottom panel2 dock.Fill 如果设置panel2 fill 的时候 发现他铺满整个窗体的时候 对着panel2 ctrl x ctrl v 就好了

111,129

社区成员

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

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

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