【问题标题】:Resize the multiple child forms in mdiparent automatically , panels and mdi C#自动调整 mdiparent 中的多个子窗体、面板和 mdi C#
【发布时间】:2013-06-12 07:30:40
【问题描述】:

我有 mdiparent 表单,左侧有菜单和面板,其中包括树视图。父窗体的剩余空间可以包括多个窗口,具体取决于用户想要打开多少个窗口。面板边缘有一个分隔器[左侧有树视图的那个],它可以增加或减少面板的宽度,从而增加图表的面积。

我曾尝试在拆分器移动事件处理程序中使用 mdilayout,但它不起作用。

first pic http://www.imageurlhost.com/images/x6pf89yp8x4cnm1hb4x_first.png

红色竖线是增加/减少左侧面板宽度的分隔线。 最初,右侧没有空间。打开一个新的子窗口非常适合剩余空间。

2 http://www.imageurlhost.com/images/b1pu4lztl7eel12b1ho_second.png

拆分器向左移动。右侧有一个空格,子窗体不会调整大小并适合该区域。

3 http://www.imageurlhost.com/images/f9ep8rd4fem5aynhc9z_third.png

拆分器向左移动更多,右侧空间不断增加。 如果我再打开一张图表,然后再打开 4 张旧图和 1 张新图,总共 5 张表格将完美匹配,并且空间将被利用。如果我再次移动分离器,则将再次引入右侧的空间。

4 http://www.imageurlhost.com/images/e3fup4nrfb7aj7d13e5_four.png

每次拆分器移动时,如何使所有子表单完全适合剩余空间?

Splitter move/mouseup 事件处理程序中的代码。

    this.LayoutMdi(MdiLayout.TileHorizontal);       

子窗体[图形窗口]有

    this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;

父窗体[在图片中]

    this.leftpanel.Dock = System.Windows.Forms.DockStyle.Left;
    this.leftpanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
    this.AutoSize = true;

如果父窗体被调整大小,那么调整大小事件处理程序也是

    this.LayoutMdi(MdiLayout.TileHorizontal);

这似乎运作良好。如果我最大化/自定义大小父表单,子表单会相应地调整大小。

如果我对分离器事件处理程序使用相同的东西,它不会以相同的方式工作。

谢谢,

【问题讨论】:

  • 我猜你移动分离器的速度越快,你得到的空间就越多。您的代码有问题,我们看不到。
  • 我已经编辑了帖子!是的,我移动得越快,我得到的空间就越大。如果我慢慢移动它,我会得到更少的空间。我相信这是一种随机行为,或者我不明白为什么快速和慢速行为不同的逻辑。

标签: c# .net winforms mdi mdichild


【解决方案1】:

试过这样的吗?

Form.Anchor = AnchorStyles.Left | AnchorStyles.Top;

【讨论】:

  • 对不起:/不知道您使用的是SplitContainerControl还是Splitter
  • 只是一个拆分器,我可以使用 SplitContainerControl。它可以达到目的。但为此,我必须在面板中添加所有子表单。它可能会导致我的应用程序出现性能问题。因为,我不知道一个面板可以处理多少个子窗口。
  • 老实说,至少值得一试:)
  • 是的,不幸的是它没有用。布局逻辑在表单调整大小事件处理程序中工作正常。它应该在拆分器事件处理程序中工作。太令人沮丧了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多