zoukankan      html  css  js  c++  java
  • winfrom 中 label 文字随着窗体大小变化

    在进行winfrom 开发过程中,窗体中的文字需要随着窗体大小变化,否则会影响窗体的美观和客户的体验。

    之前曾经试过几种方法效果都不满意,例如将label的Dock 属性设置为fill.这样的设置对解决问题没有帮助,文字并没有随着窗体变化。

    也尝试获取窗体大小让label文字的大小按比例随着窗体变化,这种方法倒是能实现效果,但会影响窗体原始对label 文字大小的设置。

    最后找到了下面的方法很好的解决了这个问题,现在分享出来。

    首先用VS创建FORM工程,然后再窗体中添加label,按照下面的代码执行。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            Single X;
            Single Y;
    
            public Form1()
            {
                InitializeComponent();
                this.Resize += new EventHandler(Form1_Resize);
    
                X = this.Width;
                Y = this.Height;
               // y = this.statusStrip1.Height;
                setTag(this);
            }
            private void setTag(Control cons)
            {
                foreach (Control con in cons.Controls)
                {
                    con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
                    if (con.Controls.Count > 0)
                        setTag(con);
                }
            }
            private void setControls(float newx, float newy, Control cons)
            {
                foreach (Control con in cons.Controls)
                {
                   Single aa= label1.Font.Size;
                    string[] mytag = con.Tag.ToString().Split(new char[] { ':' });
                    float a = Convert.ToSingle(mytag[0]) * newx;
                    con.Width = (int)a;
                    a = Convert.ToSingle(mytag[1]) * newy;
                    con.Height = (int)(a);
                    a = Convert.ToSingle(mytag[2]) * newx;
                    con.Left = (int)(a);
                    a = Convert.ToSingle(mytag[3]) * newy;
                    con.Top = (int)(a);
                    Single currentSize = Convert.ToSingle(mytag[4]) * newy;
                    con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
                    if (con.Controls.Count > 0)
                    {
                        setControls(newx, newy, con);
                    }
                }
    
            }
    
            void Form1_Resize(object sender, EventArgs e)
            {
                // throw new Exception("The method or operation is not implemented.");
                float newx = (this.Width) / X;
                //  float newy = (this.Height - this.statusStrip1.Height) / (Y - y);
                float newy = this.Height / Y;
                setControls(newx, newy, this);
                //this.Text = this.Width.ToString() +" "+ this.Height.ToString();
    
            }
    
    
    
        }
    }

    效果不错:

  • 相关阅读:
    6.Ray-消息订阅器编写
    附录:2-Event Sourcing pattern (事件溯源设计模式)
    附录:1-Grain生命周期-译注
    4.Ray-Handler之CoreHandler编写
    Q&A-20180128
    TODO
    3.Ray-Event编写
    缓存技术内部交流_01_Ehcache3简介
    Spring AMQP 源码分析 04
    Spring AMQP 源码分析 03
  • 原文地址:https://www.cnblogs.com/fuhang/p/9564524.html
Copyright © 2011-2022 走看看