2

我正在使用C#.NET Compact Framework 2.0 SP2为Windows Mobile 5.0及更高版本开发应用程序。

我有一个 WinForm,里面有两个面板(upperPanel 和 bottomPanel)。我希望upperPanel 总是填充表单高度的2/3,而bottomPanel 填充表单高度的1/3。两个面板都将完全填充表单的宽度。

我用过这个:

upperPanel.Dock = Fill;
bottomPanel.Dock = Bottom;

但是 upperPanel 完整地填写了表格。

我怎样才能做到这一点?我希望,或多或少,在不同的外形尺寸横向纵向模式上使用相同的 gui。

谢谢你。

4

8 回答 8

9

您需要做的是先将底部面板放在上面并将其Dock属性设置为Bottom. 然后将面板的高度设置为窗体高度的 1/3。最后,添加第二个面板并将其Dock属性设置为Fill. 这里的关键是您要添加将填充最后添加的剩余区域的控件。或者,您可以在 Visual Studio 中使用“置前”和“置后”命令来让设计人员进行合作。

您可能还需要OnSizeChanged为表单挂钩事件并重新设置底部面板的高度以考虑布局更改。自从我进行紧凑型框架编程以来已经有一段时间了,所以我不确定。

于 2009-11-04T18:59:48.150 回答
1

将两个面板设置为“未锚定”。即:移除 Dock-Value 并清除 Anchor 属性。然后,移动控件,使其按照您希望的大小调整大小。

之后,在调整表格大小时,他们应该相对调整大小。

编辑
糟糕,刚刚试了一下,确定它不起作用。我将它与一个自动将控件保持在窗口中心的解决方案混合在一起......

好吧,我猜你必须为表单的Resize事件创建一个处理程序,并在调整表单大小后手动对齐控件。

于 2009-11-04T11:37:36.843 回答
1

转到工具、其他窗口、文档大纲。找到两个面板,并交换它们的顺序。必须首先出现的控件DockStyle.Fill才能正确停靠。(或最后一个......永远不确定它是哪一个,但它是其中之一:p)

不过,这并不能解决总是 1/3 和 2/3 的问题……因为底部面板将具有固定的高度(除非我弄错了)。我想也许TableLayoutPanel支持这个虽然......

更新:如评论中所述,该面板在紧凑框架中不存在。所以,我想这个问题最简单的解决方案是尝试使用停靠,但只要表单大小发生变化,就会更新底部面板的高度。

于 2009-11-04T11:45:22.057 回答
1

右键单击upperPanel 并选择Bring To Front。但是,我认为这不会给您想要的结果。调整大小时,底部面板将保持相同的高度,而上部面板将拉伸以填充表单。

使用您的停靠设置,使用此代码可能会成功:

    protected override void OnSizeChanged(EventArgs e)
    {
        base.OnSizeChanged(e);

        this.bottomPanel.Height = Convert.ToInt32((double)this.Height / 3.0);
    }
于 2009-11-04T14:52:13.587 回答
0

如果您希望它完美地工作,您需要向 Form 的 Resize 事件添加一些代码,然后专门计算出相对大小并将控件放置在调整大小后的正确位置。

如果您不担心失去精度并且表格不会移动太多,您可以通过使用一些相对智能的锚定来避免这种情况。本质上,您将不得不选择一个“种植者”(表格中变大的部分,表格越大)。在这种情况下,我可能会将顶部锚定到 Top | 左 | 右侧和底部到顶部 | 左 | 对 | 底部。这意味着如果表单展开,表单的下半部分会变大。在大多数情况下,这是可以接受的。如果不使用 Resize 事件和一些代码。

于 2009-11-30T18:20:00.460 回答
0

您可以通过使用嵌套面板以及锚定和停靠属性的一些设置来获得所需的设计。按照以下步骤操作:1)添加表单并在其上放置一个 Panel1。将其 Dock 属性设置为“Fill”,将 ResizeMode 设置为“Grow&Shrink”。2) 添加第二个面板 2 并将其 Dock 属性设置为“底部”,设置高度并将 Anchor 属性设置为“顶部,左侧”。3) 添加第三个面板并将其 Dock 属性设置为“无”,设置高度并将 Anchor 属性设置为“上、下、左、右”。

保存并编译。现在所有面板都将通过调整大小保持它们的相对定位。

于 2014-01-23T11:35:28.023 回答
0

我想为@jasonh 的回答加一点。

对于占据表单 2/3 的面板,您必须将面板的 AutoScroll 属性设置为 true。

这将使面板在控件大小超过用户可见性时显示滚动,并确保较小面板的可见性,即表单高度的 1/3。

于 2011-12-29T05:50:03.177 回答
0

最简单的方法是嵌套面板。只需为顶部底部和填充设置面板。然后使用这些面板中的面板来做同样的事情。我在其中遇到的唯一问题是数据网格调整大小,无论如何这总是很痛苦。在这种情况下,您必须使用一些代码来调整表单调整大小事件上的数据网格控件的大小。

于 2010-05-05T17:50:59.480 回答