使随机标签位置适应窗口大小的最有效方法是啥?
Posted
技术标签:
【中文标题】使随机标签位置适应窗口大小的最有效方法是啥?【英文标题】:What is the most efficient way to make random label location adjust to window size?使随机标签位置适应窗口大小的最有效方法是什么? 【发布时间】:2019-10-13 14:46:17 【问题描述】:我在表单上有一个以 X 坐标为中心的标签,我正试图让它在表单调整大小时调整其位置。 因此,我正在处理 Resize 事件以更新标签 Location 属性。
private void SecondaryWindow_Resize(object sender, EventArgs e)
lblStartPointX = this.Width / 2 - lblSecondary1.Width / 2;
lblStartPointY = lblSecondary1.Location.Y;
lblSecondary1.Location = new Point(lblStartPointX, lblStartPointY);
似乎我不能直接为 lblSecondary1.Location.X 属性赋值(编译器认为这是一个错误),所以我想出了这段代码。
但它让我觉得完成任务的方法不是很有效...如果你不断调整窗口大小,我想知道会创建多少 Point 对象?
【问题讨论】:
How do I keep a label centered in WinForms?的可能重复 创建了多少 Point 对象 - 您是否发现性能问题? 没有性能问题是否意味着我的代码没问题?从长远来看,不考虑创建过多变量而编写代码真的是个好主意吗? 【参考方案1】:有多种方式。我建议使用 WPF 代替响应式设计。
当 Label 是唯一的控件时,您可以打开 Autosize,将锚点设置为所有边,将 TextAlgin 设置为 Center 并调整 Label 的大小,这样它就占据了整个空间。
另一种方法是使用 TableLayoutPanels。需要一些时间来适应它,但它接近 WPF 的网格。
【讨论】:
感谢您的回答,但是如果我需要用代码来做呢? 你为什么要这样做?你可以按照自己的方式去做。当您想通过代码/运行时添加标签时,您仍然可以设置锚点等。当你不知道怎么做时,从表单的 *.designer.cs 文件中窃取它。【参考方案2】:您可以使用:2 个选项 1)转到该goto Layout >> Anchor中的标签属性,然后根据需要设置锚点。 2)转到该goto Layout >> Dock中的标签属性,然后根据需要设置Dock。
【讨论】:
【参考方案3】:由于您希望标签在窗体调整大小时保持在 X 坐标的中心,因此在加载时将其位置移动到窗体的中心,将标签的锚点设置为 AnchorStyles.Top
:
private void form1_Load(object sender, EventArgs e)
label1.Anchor = AnchorStyles.Top;
label1.Location = new Point((this.Width - label1.Width) / 2, label1.Top);
当Form.Width
调整大小时,它将保持其位置。
如果您想让它在两个维度上保持居中,请将其居中并移除所有锚点。该控件将保留在其父窗体的中间:
private void form1_Load(object sender, EventArgs e)
label1.Anchor = AnchorStyles.None;
label1.Location = new Point((this.Width - label1.Width) / 2,
(this.Height - label1.Height) / 2);
【讨论】:
以上是关于使随机标签位置适应窗口大小的最有效方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章