【问题标题】:Resizing a label and Font of the form based on the window sizing根据窗口大小调整表单的标签和字体大小
【发布时间】:2012-03-19 14:45:51
【问题描述】:

我正在寻求帮助,根据其窗口大小调整标签的大小和字体大小。

也就是说,当一个窗口调整大小时,标签本身会调整它的字体和背景框来做同样的事情。

我知道我正在触发表单的 Resize 事件,但我不知道是什么。有人可以帮忙吗?

【问题讨论】:

    标签: vb.net winforms resize


    【解决方案1】:

    这是用 C# 编写的,但它可能会对您有所帮助。

    public Form1()
    {
        InitializeComponent();
        this.Resize += new EventHandler(Form1_Resize);
        label1.AutoSize = false;
        label1.Size = new Size(100, 50);
        label1.BackColor = Color.White;
    }
    
    void Form1_Resize(object sender, EventArgs e)
    {
        label1.Size = new Size(this.ClientSize.Width / 3, this.ClientSize.Height / 3);
        label1.Font = new Font("Arial", this.ClientSize.Height / 20);
    }
    

    【讨论】:

      【解决方案2】:

      默认情况下,标签设置为 AutoSize,它应该自行处理(假设这就是您所说的“背景框”)。

      因此,您需要做的就是根据表单的新大小更改字体。应该这样做:

       private int _lastFormSize;
              private void Form1_Resize(object sender, EventArgs e)
              {
                  var bigger = GetArea(this.Size) > _lastFormSize;
                  float scaleFactor = bigger ? 1.1f : 0.9f;
                  label1.Font = new Font(label1.Font.FontFamily.Name, label1.Font.Size*scaleFactor);
      
                  _lastFormSize = GetArea(this.Size);
              }
      
              private int GetArea(Size size)
              {
                  return size.Height*size.Width;
              }
      

      您可能希望根据表单的面积增加/减少多少来确定性地计算比例因子,但该代码至少应该为您提供效果。

      【讨论】:

        猜你喜欢
        • 2014-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-07
        • 1970-01-01
        • 1970-01-01
        • 2011-02-28
        相关资源
        最近更新 更多