C #Winform窗体自适应

2023-05-16

说明:Winform让窗体内的控件随着窗体的大小而改变,而且能让指定的控件始终处于居中位置。封装成类,直接拷贝过去即可。

一、类源码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace ControlsAutoSize
{
    class ControlChange
    {
        #region 控件大小随窗体大小等比例缩放
        public float x;//定义当前窗体的宽度
        public float y;//定义当前窗体的高度
        public 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);
                }
            }
        }
        public void setControls(float newx, float newy, Control cons)
        {
            //遍历窗体中的控件,重新设置控件的值
            foreach (Control con in cons.Controls)
            {
                //获取控件的Tag属性值,并分割后存储字符串数组
                if (con.Tag != null)
                {
                    string[] mytag = con.Tag.ToString().Split(new char[] { ';' });
                    //根据窗体缩放的比例确定控件的值
                    con.Width = Convert.ToInt32(System.Convert.ToSingle(mytag[0]) * newx);//宽度
                    con.Height = Convert.ToInt32(System.Convert.ToSingle(mytag[1]) * newy);//高度
                    con.Left = Convert.ToInt32(System.Convert.ToSingle(mytag[2]) * newx);//左边距
                    con.Top = Convert.ToInt32(System.Convert.ToSingle(mytag[3]) * newy);//顶边距
                    Single currentSize = System.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);
                    }
                }
            }
        }

        /// <summary>
        /// 控件在父控件中居中
        /// </summary>
        /// <param name="ctr">要设置的控件</param>
        /// <param name="isLR">左右居中</param>
        /// <param name="isUD">上下居中</param>
        /// <returns></returns>
        public  bool CenterCtr(Control ctr, bool isLR, bool isUD)
        {
            Control pCtr = ctr.Parent;
            int x = isLR ? ((pCtr.Width - ctr.Width) / 2) : ctr.Location.X;
            int y = isUD ? ((pCtr.Height - ctr.Height) / 2) : ctr.Location.Y;
            ctr.Location = new System.Drawing.Point(x, y);
            return true;
        }

        #endregion

    }
}
二、调用如下

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 ControlsAutoSize
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        ControlChange cc = new ControlChange();

        private void Form1_Load(object sender, EventArgs e)
        {
            //窗体自适应
            cc.x = this.Width;
            cc.y = this.Height;
            cc.setTag(this);

            //让控件在父控件中居中
            cc.CenterCtr(panel2, true, true);
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            //控件随着窗体改变大小
            float newx = this.Width / cc.x;
            float newy = this.Height / cc.y;
            cc.setControls(newx, newy, this);
            //让控件在父控件中居中
            cc.CenterCtr(panel2, true, true);

        }
    }
}
三、效果如下

 设计时

执行时

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C #Winform窗体自适应 的相关文章

  • MxNet系列——how_to——multi_devices

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 在多个CPU GPUs上以数据并行方式运行MXNet MXNet 支持在多个CPUs和GPUs上进行训练 其中 xff0c 这
  • MxNet系列——how_to——model_parallel_lstm

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 使用模型并行的方式在多个GPUs上训练LSTM 由于复杂的数据依赖 xff0c LSTM评价很困难 LSTM的训练过程 xff
  • MxNet系列——how_to——index

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com MXNet 怎么办系列 How tos 提供了一系列的有关安装 xff0c 基本概念 xff0c 说明 xff0c 命令和使用
  • MxNet系列——how_to——faq

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 常见问题 本节回答了 mxnet issues上的常见问题 在提问前 xff0c 请先检查该页面 如果你想要贡献本页面 xff
  • MxNet系列——how_to——env_var

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 环境变量 环境可以修改MXNet的一些设置 一般情况下 xff0c 你不需要修改这些设置 本节将它们罗列出来 xff0c 用于
  • MxNet系列——how_to——develop_and_hack

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 开发和 Hack MXNet 创建新的操作符在MXNet中使用Torch设置MXNet的环境变量 其它资源 概述 MXNet的
  • MxNet系列——how_to——cloud

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 在云上配置MXNet 从头开始设置一个AWS的GPU集群 本节提供了如何设置AWS集群以使用MXNet的详细教程 描述了如何
  • windows下使用qt编程的一些问题

    我下载了windows下qt的几个版本 qt win free 3 3 1 qt win free msvc 3 3 1还有一个qt3 0 5msvc的eval版 那个eval的版本expired了 但是只有这个版本向vc的addin目录中
  • linux创建ftp用户且限制访问目录

    1 使用root用户登录服务器 2 添加用户test xff0c 并设置路径 useradd d data sftp test test 3 为test用户设置密码 passwd test 4 查看passwd文件中是否存在test x 1
  • MxNet系列——how_to——caffe

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 如何在MXNet中使用Caffe操作符 Caffe 是一个有名的 xff0c 广泛使用的深度学习框架 MXNet 支持在它的符
  • MxNet系列——how_to——bucketing

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 在MXNet中使用Bucketing Bucketing是一种训练多个不同但又相似的结构的网络 xff0c 这些网络共享相同的
  • MxNet系列——model_zoo——index

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com MXNet的模型园地 MXNet 突出了学术论文中报告的最先进模型的快速实现 我们的模型园地 xff08 Modle Zoo
  • MxNet系列——get_started——index

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com MXNet 一个大规模的深度学习框架 MXNet 是一个开源框架 xff0c 它允许你在多种设备 xff08 从云架构到移动设
  • MxNet系列——get_started——overview_zh

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 下面是MXNet的综述 xff08 中文版 xff09 xff0c 英文读者请阅读 NIPS LearningSys pape
  • MxNet系列——get_started——windows_setup

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com Windows上安装 MXNet 在Windows上 xff0c 你可以直接下载和安装已经编译过的MXNet工具包 xff0c
  • MxNet系列——get_started——ubuntu_setup

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com Installing MXNet on Ubuntu MXNet现在支持的语言包括 xff1a Python R Julia
  • MxNet系列——get_started——docker_setup

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 在Docker上运行MXNet Docker 是一个系统 xff0c 它允许你构建一个自包含的Linux操作系统 xff0c
  • MxNet系列——get_started——cloud_setup

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 云上安装MXNet 你可以在类似于AWS的云上使用预编译的MXNet 更多细节 xff0c 请阅读下面的引文 使用 Amazo
  • MxNet系列——get_started——osx_setup

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com OS X 上安装 MXNet 安装MXNet可以分为2步 xff1a 从MXNet的C 43 43 源代码构建共享库 安装MX
  • windows下架设cvs服务器的方法

    其实很简单 xff0c 只需要下载一个cvsnt 我下载的版本是2 0 46 xff0c 现在的最新版本应该到了2 0 51d cvsnt的配置very easy xff0c 选一个文件夹作为仓库就行了 如果希望在linux下面配置cvs服

随机推荐