使随机标签位置适应窗口大小的最有效方法是啥?

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);

【讨论】:

以上是关于使随机标签位置适应窗口大小的最有效方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 CSS 使 GIF 大小适应浏览器窗口尺寸

如果它比 WPF XAML 中的窗口大,如何缩放字体大小以适应窗口?

随机化非常大文件内容的顺序的有效方法是啥?

在鼠标位置(鼠标左上角)显示 WPF 窗口的最佳方式是啥?

Java:如何将绘制的文本动态适应窗口

PyQt5 中当窗口大小改变时,如何去调整控件的位置以适应窗口大小改变的思考