【问题标题】: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 对象?

【问题讨论】:

  • 创建了多少 Point 对象 - 您是否发现性能问题?
  • 没有性能问题是否意味着我的代码没问题?从长远来看,不考虑创建过多变量而编写代码真的是个好主意吗?

标签: c# winforms


【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2015-07-21
      • 1970-01-01
      • 2014-01-03
      • 2012-04-20
      • 1970-01-01
      • 2022-09-28
      相关资源
      最近更新 更多