2016-08-04 29 views
0

看來,Dock屬性可以acnhoring方面來實現,例如listBox.Dock = DockStyle.Left;等同於(在我小的測試項目):Anchor和Dock屬性在WinForms中是否互斥?

listBox.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Bottom; 
listBox.Height = form.ClientSize.Height; 

此外,還可以設置錨點AnchorStyles.Right這將違背DockStyle.Left

所以我做了一些測試,似乎改變了Dock復位Anchor,反之亦然:

Action Print =()=>Console.WriteLine("Anchor: " + listBox.Anchor + ";; Dock: " + listBox.Dock); 
listBox.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Bottom; 
Print(); 
listBox.Dock = DockStyle.None; 
Print(); 
listBox.Dock = DockStyle.Right; 
Print(); 
listBox.Anchor = AnchorStyles.Left | AnchorStyles.Top; 
Print(); 
listBox.Anchor = AnchorStyles.Left; 
Print(); 

這是輸出:

Anchor: Top, Bottom, Left;; Dock: None 
Anchor: Top, Bottom, Left;; Dock: None 
Anchor: Top, Left;; Dock: Right 
Anchor: Top, Left;; Dock: Right 
Anchor: Left;; Dock: None

所以,我認爲,這意味着AnchorDock是互斥的,僅當Dock屬性設置爲None時纔會考慮Anchor屬性。

這是正確的嗎?

+0

你可以提出*現實的*場景(佈局條款),你會同時使用兩個? – Sinatr

+0

@Sinatr考慮一個Dock:底部的面板。當你調整表格大小,或者移動? – Luaan

+0

@Luaan,是的,我明白了。對接就像*粘在一邊(堅持保持垂直方向的絕對尺寸)。如果你想停靠在一邊**,但是**垂直調整大小,那麼你必須用錨定來替換對接。實際上對接**是**錨定。然而,對接更加舒適,因爲要錨定您必須先定位/尺寸,然後應用錨點,而使用碼頭將自動奇蹟般地定位,調整大小和「錨定」。從這裏可以看出當你停靠的時候 - 你已經使用了一些錨(不再使用它們)。 – Sinatr

回答

1

從邏輯上說,同時使用它們沒有任何意義。 Anchor說「保持距指定邊緣的距離」,而Dock說「填充這個邊緣上的所有空間」。

+0

謝謝,這是否意味着它們在框架中實現時是相互排斥的?我在問,因爲我找不到有關該主題的任何文檔。 – sashoalm

+0

如果沒有記錄,那麼行爲是不確定的,你不能依賴它。您必須反編譯源代碼或嘗試找出所有可能的組合。 –