【发布时间】:2016-08-04 07:22:01
【问题描述】:
看来Dock属性可以用acnhoring来实现,比如listBox.Dock = DockStyle.Left;就相当于(在我的小测试项目中):
listBox.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Bottom;
listBox.Height = form.ClientSize.Height;
此外,您可以将 Anchor 设置为 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 和Dock 是互斥的,并且仅当Dock 属性设置为None 时才考虑Anchor 属性。
对吗?
【问题讨论】:
-
你能提出现实场景(在布局方面)你会同时使用两者吗?
-
@Sinatr 考虑一个带有 Dock: 底部的面板。调整表单大小时,面板应该保持大小还是移动?
-
@Luaan,是的,我明白了。对接就像 sticking 到一侧(在垂直方向上保持绝对大小)。如果你想停靠在一侧但垂直调整大小,那么你必须用锚定替换停靠。实际上停靠就是锚定。然而,停靠更舒适,因为要锚定,您必须先定位/调整大小,然后再应用锚点,而使用停靠点会自动神奇地定位、调整大小和“锚定”。从这开始,当你停靠时 - 你已经使用了一些锚点(不再可能使用它们)。
-
@Sinatr 是的。不过,我仍然更喜欢在 Delphi 中处理对接的方式——它更流畅,更容易理解 IMO。带到前面来改变对接的工作方式?让我休息一下。我理解技术上为什么会这样,但这只是笨拙。一旦你完美理解了winforms中的对接模型,让它做你想做的事情并不难,但它并不完全直观:)
-
@Sinatr 我无法呈现一个真实的场景。出于好奇,我只是想知道事情是如何运作的。我希望这不是问题。