2016-08-04 2 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

Так что я полагаю, это означает, что Anchor и Dock являются взаимозависимыми, и свойство Anchor учитывается, только если для параметра Dock установлено значение None.

Верно ли это?

+0

Можете ли вы представить * реалистичный * сценарий (в макете), где вы бы использовали оба? – Sinatr

+0

@Sinatr Рассмотрим панель с док-станцией: снизу. Когда вы изменяете размер формы, должна ли панель сохранять размер или перемещаться? – Luaan

+0

@ Луаан, да, я вижу. Стыковка похожа на * приклеивание * с одной стороны (придерживаясь с сохранением абсолютного размера в перпендикулярном направлении). Если вы хотите состыковать с одной стороны **, но ** изменить размер перпендикулярно, вам придется заменить стыковку на якорь. Фактически стыковка ** ** закрепляется. Стыковка, однако, более удобна, потому что для закрепления вы должны сначала поместить/размер, а затем применить якорь, в то время как использование док-станции будет автоматически настраиваться, изменять размер и «привязывать». Из этого следует, что при доке - вы уже используете некоторые якоря (использование их уже невозможно). – Sinatr

ответ

1

Логически не имеет смысла использовать их одновременно. Якорь говорит: «Оставайтесь на таком расстоянии от указанных краев», в то время как Док говорит: «Заполните все пространство на этом краю».

+0

Спасибо, так значит ли это, что они являются взаимоисключающими, как реализовано каркасом? Я спрашивал, потому что я не мог найти документацию по этой теме. – sashoalm

+0

Если это не задокументировано, поведение не определено, и вы не можете положиться на него. Вам нужно будет декомпилировать исходный код или эксперимент, чтобы узнать все возможные комбинации. –