2009-11-27 79 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