2009-11-27 81 views
3

我想以编程方式定位表单中的某些控件,根据表单的最小大小和其客户端大小之间的差异 - 这不幸根据用户加载的主题产生不同的结果(大部分问题似乎是由于标题栏和表单边框在不同主题中具有不同高度/宽度的事实)。我试图使用整个窗口(包括标题栏等)的高度,但这似乎并没有按预期工作:(如何计算.net窗体窗体的最小_client_大小?

这不幸的是导致包含控件错位。在这个特定的使用场景中,使用自动布局控件(如流布局面板)不是一个可行的解决方案

我必须失去真的很明显的东西 - ?有没有这样做的更好的办法

道歉,如果这个问题听起来很愚蠢

非常感谢 Dave

回答

5

我已经找到了正确的工作出来的唯一办法是做这样的事情:

int delta = this.Height - this.ClientRectangle.Height; 

,然后用它当过我需要基础的东西掉在客户端的形式为 的(我用它当我想要一个窗体自动调整大小到一些按钮,并有一个相等的边框)。

所以你:

int delta = this.Height - this.ClientRectangle.Height; 
int actualMinHeight = this.MinimumSize.Height - delta; 

HTH

编辑:我曾尝试使用SystemInformation.Border3DSizeSystemInformation.BorderSize性质,但他们也没有给出正确的宽度适合我。

+0

非常感谢您的回复 - 我给了这个镜头,它几乎可以工作:),但它似乎忽略了顶部和底部边界的高度(即它的约4个像素) - 我要去尝试使用GetSystemMetrics(SM_CYBORDER)来查看是否有效。 – fusi 2009-11-27 13:00:40

+0

您可能会发现'SystemInformation.Border3DSize'与'delta'结合可能会奏效。 – Pondidum 2009-11-27 13:10:21

+0

结束了这是怎么回事: 昏暗clientRectDelta作为整数= Me.Height - Me.ClientRectangle.Height - (SystemInformation.Border3DSize.Height * 2) ,只是给人一种有点绕的东西更多的空间,使得一些像素差异没有那么明显 - 真的很失望,应该是简单的东西只是:( 非常感谢你在这件事情上的帮助,你们大大帮助了我 - 这似乎并不存在,因为它似乎似乎存在这是一个棘手的问题,我认为我的接近IM即将去。再次感谢! – fusi 2009-11-27 13:49:22

0

我不是100%肯定,如果你所要求的一种手段,能够在运行时根据表格,边框的厚度,在动态调整控制图标间距等,但是,如果这种被downvoted,我有我自己责怪误解你的问题,这里的文章CodeProject。由于您提到了不同的边框尺寸等,您可能需要查看通过使用GetSystemMetrics pinvokes控制边框尺寸的系统度量标准,看看这样的东西here,以及here。在这里也可以看到针对GetSystemMetrics的pinvoke.net website

希望这会有所帮助, 最好的问候, 汤姆。

+0

感谢您的回应 - 对不起,我不是很清楚,请允许我澄清: 我需要移动/调整控件基于ClientSize和MinimumSiz e表单 - 即时尝试GetSystemMetrics,如果有帮助的话。 即时通讯有点失望,应该是如此简单的事情变得相当费力。为什么地球上的MinimumSize属性是基于窗口的总高度而不是客户端的高度?!哎呀! – fusi 2009-11-27 13:04:17

0

对于任何人谁在这个问题上绊倒为好,这里善良的人们能找到的最好的解决办法是沿着线使用的东西:

Dim clientRectDelta As Integer = Me.Height - Me.ClientRectangle.Height - (SystemInformation.Border3DSize.Height * 2) 
Dim actualMinimumHeight As Integer = Me.MinimumSize.Height - clientRectDelta 
Dim deltaHeight As Integer = Me.ClientRectangle.Height - actualMinimumHeight 

然而,这忽略任何控制特定主题相关的高度(即列表视图中列标题的高度发生变化,这似乎会改变列表视图的整体高度,这可能会导致重叠等) - 但它似乎大部分工作。

非常感谢Pondidum,tommieb75和nobugz谁帮助过这个问题! (对不起,但我目前没有足够的声望来标记所有答案+1)。

+0

虽然你可以接受答案! (我们所有答复的左边的勾号,你只能接受一个答案) – Pondidum 2009-11-27 15:33:51