首页 > 编程语言 >C#窗体控件,文字随电脑分辨率自动调整大小

C#窗体控件,文字随电脑分辨率自动调整大小

时间:2022-12-01 17:45:09浏览次数:52  
标签:控件 C# float newx newy 窗体 new con

一、在类中添加方法,代码如下:

#region 窗体控件、字体随分辨率调整,自动调整大小
        public static 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)

                    类.Main.SetTag(con);
            }
        }
        public static void SetControls(float newx, float newy, Control cons)
        {

            foreach (Control con in cons.Controls)
            {
                try
                {
                    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]) * Math.Min(newx, newy);

                    con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);

                    if (con.Controls.Count > 0)
                    {
                        类.Main.SetControls(newx, newy, con);
                    }
                }
                catch
                {

                }
            }
        }
        #endregion

  注:类中需要引用using System.Drawing;

二、在窗体中声明两个变量

private float X;

private float Y;

三、窗体的两个事件

private void 窗体名称_Load(object sender, EventArgs e)
        {            
            this.Resize += new EventHandler(窗体名称_Resize);

            X = this.Width;

            Y = this.Height;

            类.Main.SetTag(this);

            窗体名称_Resize(new object(), new EventArgs());
            this.WindowState = FormWindowState.Maximized;
        }
        private void 窗体名称_Resize(object sender, EventArgs e)
        {
            if (X == 0)
            {
                窗体名称_Load(new object(), new EventArgs());
            }
            else
            {
                float newx = (this.Width) / X;

                float newy = this.Height / Y;

                类.Main.SetControls(newx, newy, this);
            }
        }

  注:如果是子窗体,窗体要设置属性MaximizeBox=True,MinmizeBox=True,Windowstate=Normal

标签:控件,C#,float,newx,newy,窗体,new,con
From: https://www.cnblogs.com/tyxajh/p/16942149.html

相关文章

  • Django 操作数据库 出现 too many connections错误 连接次数过多
    通过CONN_MAX_AGE优化Django的数据库连接https://www.cnblogs.com/aaron-agu/p/10380559.html ......
  • vue全局引入scss(mixin)
    前言today,isgoodday,中午吃了个农民工外卖,有点撑,想在床上躺会,TMD,睁开眼天黑了,别说,冬天的上海天黑的挺早,基本上五点半就已经全黑了,住在出租屋的我,却感觉不到上海的灯火通......
  • VUE在线调用阿里Iconfont图标库
    前言多年前我本是个服务端小白,随着行业内卷,硬是被熬成了前端小白。。。开个玩笑,只是个人比较喜欢学习技术罢了!本章将带领大家以另一个高端的方式打开阿里Iconfont图标库,......
  • SpringSecurity OAuth2异常处理OAuth2Exception
    前言在我们使用SpringSecurityOAuth2做认证授权时,默认返回都是SpringSecurityOAuth2提供好的,返回不是很友好,本章就是针对这些异常做统一返回处理,主要解决返回格式问题,......
  • MySQL删除数据的三种方式:delete、drop、truncate的区别
    本篇主要讨论MySQL删除数据的三种方式:delete、drop、truncate的区别当行数据批量delete时,InnoDB如何处理自增ID的目录参考来源:1、建表2、插入数据3、删除数据deletetru......
  • SpringSecurity OAuth2 关于 UserAuthenticationConverter
    前言之前写了一大堆关于SpringSecurityOAuth2的相关文章,本以为可以告一段落了,但是有了解到一个新东西,之前没注意到的,就是UserAuthenticationConverter,本章就来看看这是......
  • SpringSecurityOAuth2授权流程源码分析(自定义验证码模式)
    前言周末闲来无事,谢谢自己的项目,然后想把老的授权模式改造一下,老的是基于SpringSecurity的实现,想升级为SpringSecurityOAuth2模式,于是看了下之前搭建的SpringSecurityO......
  • ElasticSearch面试题
    1.为什么要使用ElasticSearch系统中的数据,随着业务的发展,时间的推移,将会非常多,而业务中往往采用模糊查询进行数据的搜索,而模糊查询会导致查询引擎放弃索引,导致系统......
  • RocketMQ顺序消息
    抛出问题顺序消息?不是消息队列么,队列不是有序的么,不是先进先出么,对,队列是的,但是RocketMQ是对队列的升级,我们创建一个topic其实就是相当于创建了一个队列,但是这个队列是聚......
  • Linux搭建ElasticSearch集群
    前言这是整个ElasticSearch搭建的最后一篇文章,其实对我而言ElasticSearch在Linux上搭建集群写这篇文章意义并不大,只是为了补充这个空白而已,所以这篇文章并不会讲解很详细......