看起来Dock属性可以用acnhoring来实现,例如listBox.Dock = DockStyle.Left;
相当于(在我的小测试项目中):
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
属性设置为{{1时才考虑Dock
属性}}
这是对的吗?
答案 0 :(得分:1)
从逻辑上讲,同时使用它们没有任何意义。 Anchor说“距离指示的边缘保持这个距离”,而Dock说“填满这边缘的所有空间”。
答案 1 :(得分:1)
他们确实是独家的。在属性面板中,当您停靠控件时,它会忘记锚定设置,当您锚定它时,它会忘记停靠设置。 但是,在某些情况下,您可能需要两者的组合。 让我们假设您有一个隐藏的底部停靠进度条,您希望在执行长任务时推送底部停靠的数据网格视图。 但是,您希望在显示进度条时保持datagridview顶部锚点。 解决方案是在锚定面板内放置一个底部停靠的进度条和一个完整的停靠数据网格视图(按此顺序)。