对接和锚定在Windows窗体应用程序

问题描述:

我开发的Windows Mobile 5.0及以上的应用,而在C#.NET Compact Framework的2.0 SP2对接和锚定在Windows窗体应用程序

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

我用这个:

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

但upperPanel完全地填写表格。

我该怎么做?我想,更多或更少,相同的gui 不同的外形因子风景protrait模式。

谢谢。

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

您可能还需要挂钩OnSizeChanged活动的形式和重新设置底板的高度来考虑布局的改变。自从我做了紧凑的框架编程之后,我就有一段时间了,所以我不确定。

+0

“这里的关键是,你想添加控制,将填补最后添加的剩余区域” Gant 2010-03-16 11:27:29

+0

正如你所说,而不是增加最后一个,你可以解开,然后重新停靠......好! – Dunc 2013-05-23 08:42:06

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

之后,在调整表格大小后,应相对调整大小。

编辑
哎呀,只是试过了,确定它不起作用。我混合了一个解决方案,自动保持控件在窗口中居中...

嗯,我猜你必须创建一个窗体的Resize事件的处理程序,并手动对齐窗体后的控件调整大小。

+0

+1指出我的金发时刻 – GenericTypeTea 2009-11-04 11:41:36

+0

^^没问题:) – 2009-11-04 11:42:20

+0

不,它不起作用。 – VansFannel 2009-11-04 14:14:37

转到工具,其他窗口,文档大纲。找到两个面板,并交换它们的顺序。具有DockStyle.Fill的控制器必须首先对其进行正确对接。 (或最后..不知道它是哪一个,但它是其中之一:p)

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

更新:正如在评论中指出,该面板不紧凑的框架存在。所以,我想这个问题的最简单的解决方案会尝试使用停靠,但每当窗体大小发生变化时更新底部面板的高度。

+0

这是一个耻辱,但Compact Framework中没有TableLayoutPanel。 – 2009-11-04 11:53:02

+0

顺便说一句,你是正确的底部面板有一个固定的高度。 – 2009-11-04 11:54:08

+0

啊,好的。那么,我从来没有使用Compact Framework,只是常规的WinForms。 – Svish 2009-11-04 18:46:19

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

使用您的对接设置,使用此代码可能做的伎俩:

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

     this.bottomPanel.Height = Convert.ToInt32((double)this.Height/3.0); 
    } 
+0

如果你打算倒下,有勇气说出原因。 – 2009-11-04 19:06:57

+1

我希望这是我的解决方案。 downvote之前尝试它。 – VansFannel 2009-11-08 11:46:23

如果你想这很好地工作,你需要一些代码添加到窗体的Resize事件,然后具体工作出相对大小和调整大小后会将控制在正确的位置。

如果你不担心失去精度和形式都不会动太多,你可以通过使用一些比较聪明的锚固避免这种情况。基本上,你将不得不选择一个“种植者”(形式越大,表单越大的部分)。在这种情况下,我可能会将顶部部分固定到顶部|离开|右侧和底部到顶部|离开| Right |底部。这意味着如果表单展开,表单的下半部分会变大。大多数情况下这是可以接受的。如果它不使用Resize事件和一些代码。

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

我想补充一点,以@jasonh答案。

对于占据形式的2/3的面板上,你将不得不面板的AutoScroll属性设置为true。

当控制尺寸超过用户的可见度时,这将使面板显示滚动,同时确保较小面板的可见性为窗体高度的1/3。

您可以通过使用嵌套面板以及少量设置使用锚定和停靠属性来获得所需的设计。按照以下步骤操作: 1)添加Form并在其上放置Panel1。将其Dock Property设置为'填充'并将ResizeMode设置为'增加&收缩'。 2)添加第二个panel2并将其Dock属性设置为'Bottom',设置高度并将Anchor属性设置为'Top,Left'。 3)添加第三个面板并将其Dock属性设置为'None',设置高度并将Anchor属性设置为'Top,Bottom,Left,Right'。

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