实现组件大小随窗口大小变化

news2024/11/25 23:46:20

暂时只学会用代码的方式,如果后续了解到在可视化界面的属性栏中可以设置会进而更新分享

组件界面和一些属性

在这里插入图片描述
一些布局属性
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

详细代码实现

在这里插入图片描述

详细代码

//从这里开始复制下面的代码!!!
        //第一步,定义控件自适应窗口类AutoSizeFormClass
        class AutoSizeFormClass
        {
            public struct ControlRect
            {
                public int Left;
                public int Top;
                public int Width;
                public int Height;
            }

            public List<ControlRect> oldCtrl = new List<ControlRect>();
            int ctrlNo = 0;

            //重要方法一:记录窗体和其控件的初始位置和大小controllInitializeSize()
            public void controllInitializeSize(Control mForm)
            {
                ControlRect cR;
                cR.Left = mForm.Left; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height;
                oldCtrl.Add(cR);
                AddControl(mForm);

                foreach (ControlRect item in oldCtrl)
                {
                    Console.WriteLine(item.Width);
                }
            }
            private void AddControl(Control ctl)
            {
                foreach (Control c in ctl.Controls)
                {
                    ControlRect objCtrl;
                    objCtrl.Left = c.Left; objCtrl.Top = c.Top; objCtrl.Width = c.Width; objCtrl.Height = c.Height;
                    oldCtrl.Add(objCtrl);
                    if (c.Controls.Count > 0)
                        AddControl(c);
                }
            }

            //重要方法二:控件自适应大小方法controlAutoSize()
            public void controlAutoSize(Control mForm)
            {
                if (ctrlNo == 0)
                {
                    ControlRect cR;
                    cR.Left = 0; cR.Top = 0; cR.Width = mForm.PreferredSize.Width; cR.Height = mForm.PreferredSize.Height;
                    oldCtrl.Add(cR);
                    AddControl(mForm);
                }
                float wScale = (float)mForm.Width / (float)oldCtrl[0].Width;
                float hScale = (float)mForm.Height / (float)oldCtrl[0].Height;
                ctrlNo = 1;
                AutoScaleControl(mForm, wScale, hScale);
            }
            private void AutoScaleControl(Control ctl, float wScale, float hScale)
            {
                int ctrLeft0, ctrTop0, ctrWidth0, ctrHeight0;
                foreach (Control c in ctl.Controls)
                {
                    ctrLeft0 = oldCtrl[ctrlNo].Left;
                    ctrTop0 = oldCtrl[ctrlNo].Top;
                    ctrWidth0 = oldCtrl[ctrlNo].Width;
                    ctrHeight0 = oldCtrl[ctrlNo].Height;

                    c.Left = (int)((ctrLeft0) * wScale);
                    c.Top = (int)((ctrTop0) * hScale);//
                    c.Width = (int)(ctrWidth0 * wScale);
                    c.Height = (int)(ctrHeight0 * hScale);//
                    ctrlNo++;
                    if (c.Controls.Count > 0)
                        AutoScaleControl(c, wScale, hScale);

                    if (ctl is DataGridView)
                    {
                        DataGridView dgv = ctl as DataGridView;
                        Cursor.Current = Cursors.WaitCursor;

                        int widths = 0;
                        for (int i = 0; i < dgv.Columns.Count; i++)
                        {
                            dgv.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells);  // 自动调整列宽  
                            widths += dgv.Columns[i].Width;   // 计算调整列后单元列的宽度和                      
                        }
                        if (widths >= ctl.Size.Width)  // 如果调整列的宽度大于设定列宽  
                            dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;  // 调整列的模式 自动  
                        else
                            dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;  // 如果小于 则填充  

                        Cursor.Current = Cursors.Default;
                    }
                }
            }
        }


        //第二步,实例化上面定义的类
        AutoSizeFormClass asc = new AutoSizeFormClass();

        //第三步,初始化窗口时记录控件的大小和位置
        private void Auto_Load(object sender, EventArgs e)
        {
            asc.controllInitializeSize(this);
        }

        //第四步,主窗口大小发生变化触发的事件
        private void Auto_SizeChanged(object sender, EventArgs e)
        {
            asc.controlAutoSize(this);
        }

效果

在这里插入图片描述
放大到全屏的效果,(拖动窗口大小也会跟着变化)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/835771.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

恒盛策略:成交10天增10倍,“牛市旗手”太火了!TMT赛道股也重新活跃

A股商场周五上午高开&#xff0c;盘中大幅走强&#xff0c;但其后一度收窄涨幅&#xff0c;挨近上午收盘又从头有所回升。 作为“牛市旗手”&#xff0c;券商板块进一步上涨&#xff0c;成交额也进一步放量&#xff0c;上午半个交易日成交额现已打破900亿元&#xff0c;照此趋势…

由红黑树到map/set

文章目录 一.map/set 的封装思路1.封装思路2.红黑树节点调整3.map 和 set 的定义4.仿函数 KeyOfValue5.map/set 的插入 二.map/set 迭代器实现1.迭代器的定义2.解引用运算符重载3.成员访问运算符重载4.(不)等于运算符重载5.begin() 与 end()6. 运算符重载7.-- 运算符重载8.[ ]下…

公文,需要明确分工和流程,以确保公文的准时完成和质量保障

对于需要多人协作的公文&#xff0c;需要明确分工和流程&#xff0c;以确保公文的准时完成和质量保障。 具体来说&#xff0c;可以采取以下几个方面的工作&#xff1a; 1.明确分工&#xff1a;在多人协作的公文中&#xff0c;需要明确各自的职责和任务&#xff0c;合理分配工作…

Codeforces Round 881 (Div. 3)F1题解

文章目录 [Omsk Metro (simple version)](https://codeforces.com/contest/1843/problem/F1)问题分析1.分析如何知道根节点到某个结点的区间内是否存在一个子段和为k2.方法1使用树形DP来动态维护每个节点到根节点的最大子段和和最小子段和代码 Omsk Metro (simple version) 问题…

专业商城财务一体化-线上商城+进销存管理软件,批发零售全行业免费更新

订货流程繁琐&#xff1f;订单处理效率低&#xff1f;小程序商城与进销存系统不打通&#xff1f;数据需要手动输入同步&#xff1f;财务与的结算对账需要大量手工处理&#xff1f;零售批发从业者&#xff0c;如何你也有以上烦恼&#xff0c;可以看看进销存小程序订货商城&#…

软件设计师(六)结构化开发方法

结构化方法由结构化分析、结构化设计、结构化程序设计构成&#xff0c;它是一种面向数据流的开发方法。 分类说明结构化分析&#xff08;SA&#xff09;根据分解与抽象的原则&#xff0c;按照系统中数据处理的流程&#xff0c;用数据流图来建立系统的功能模型&#xff0c;从而…

Java错误小全

文章目录 NullPointer异常&#xff1a; 错误描述&#xff1a;当试图访问一个空引用对象的属性或调用空引用对象的方法时&#xff0c;会抛出NullPointer异常。 复现示例&#xff1a; String str null; System.out.println(str.length());解决方案&#xff1a;在使用对象之前&am…

JVM之两种垃圾判断方式

文章目录 一、所谓的垃圾二、引用计数器法三、可达性分析法GC Roots工作原理三色标记标记算法并发标记 一、所谓的垃圾 垃圾&#xff1a;如果一个或多个对象没有任何的引用指向它了&#xff0c;那么这个对象现在就是垃圾 在堆里存放着几乎所有的 Java 对象实例&#xff0c;在…

linux环境下pip下载包的基础使用

内网环境如何使用pip安装包 1、能连接到外网的电脑先下载好对应的whl文件 使用命令&#xff1a; pip3 download pymysql -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com下载好的文件&#xff1a; 将whl文件上传到内网机器中进行安装 pip3 in…

SpringCloudAlibaba之Sentinel(一)流控篇

前言&#xff1a; 为什么使用Sentinel&#xff0c;这是一个高可用组件&#xff0c;为了使我们的微服务高可用而生 我们的服务会因为什么被打垮&#xff1f; 一&#xff0c;流量激增 缓存未预热&#xff0c;线程池被占满 &#xff0c;无法响应 二&#xff0c;被其他服务拖…

React Native元素旋转一定的角度

mMeArrowIcon: {fontSize: 30, color: #999, transform: [{rotate: 180deg}]},<Icon name"arrow" style{styles.mMeArrowIcon}></Icon>参考链接&#xff1a; https://reactnative.cn/docs/transforms https://chat.xutongbao.top/

uniapp自定义头部导航栏

有时我们需要一些特殊的头部导航栏页面&#xff0c;取消传统的导航栏&#xff0c;来增加页面的美观度。 下面我就教大家如何配置&#xff1a; 一、效果图 二、实现 首先在uniapp中打开pages.json配置文件&#xff0c;在单个路由配置style里面设置导航栏样式​​​​​​nav…

《HeadFirst设计模式(第二版)》第四章代码——工厂模式

代码文件目录结构&#xff1a; Cheese: 原料ingredient类中只以Cheese为例&#xff0c;不重复展示&#xff1a; package Chapter4_FactoryPattern.abstractFactoryPattern.Ingredient;/*** Author 竹心* Date 2023/8/4**/public abstract class Cheese {String name;String g…

国货香水,真“香”吗?

【潮汐商业评论/原创】 Judy在选择香水这块还属于入门级选手&#xff0c;“我只买过一次YSL的自由之水&#xff0c;其他都是生日时朋友送给我的。如果真让我选&#xff0c;说实话我还真不知道买啥。”Judy偷笑着说。 在电影《香水》中&#xff0c;有一句台词说到&#xff0c;…

走进人工智能|自主无人系统 从概念到现实的飞跃

前言&#xff1a; 自主无人系统是具备自主感知、决策和执行能力的智能系统&#xff0c;无需人类干预即可完成任务的技术体系。 文章目录 序言AUS的现有应用从概念到现实的飞跃技术发展历程 目前形式领跑人困难和挑战 总结 自主无人系统&#xff08;Autonomous Unmanned Systems…

Vue2 第十九节 Vuex(二)

1.Vuex API 补充内容 2.getters 配置项 3.四个Map方法的使用 4.多组件共享数据 5.Vux模块化和命名空间 一.Vuex API补充内容 ① 在actions中&#xff0c;如果一个函数处理不完&#xff0c;可以继续调dispatch处理 ② 开发者工具是跟mutations中的数据进行交互的&#xff…

About Multiple regression

ps:this article is not very strict,just some ml and mathematic basic knowledge.My english is poor too.So If this passage make you confuse and uncomfortable.Please give me a feedback in the comment :-D Prior to this(在此之前), we learned the concept of sin…

linuxARM裸机学习笔记(2)----汇编LED灯实验

MX6ULL 的 IO IO的复用功能 这里的只使用了低五位&#xff0c;用来配置io口&#xff0c;其中bit0~bit3(MUX_MODE)就是设置 GPIO1_IO00 的复用功能的&#xff0c;GPIO1_IO00 一共可以复用为 9种功能 IO&#xff0c;分别对应 ALT0~ALT8。每种对应了不同的功能 io的属性配置 HY…

优思学院|精益生产如何真正落地?你要掌握这4个P!

怎样才能让精益生产的方法落地&#xff1f;这是一个经常听到的问题&#xff0c;但对于这个问题很多人有不同的想法和答法&#xff0c;因为大家对“落地”一词有着不同的看法。 “落地”是指整个管理系统的重组&#xff0c;是企业把所学的管理知识和方法&#xff0c;在经营实践…

那些不想骑车的正常理由和十三不骑。

骑友们最热门&#xff0c;也是常常讨论的话题大多是如何骑自行车&#xff1f;但有时候&#xff0c;我们也会思考一些另类的问题。例如&#xff0c;那些不想骑车的理由。 首先&#xff0c;我们可以从科学角度来看待这个问题。骑车虽然有益于健康&#xff0c;但是骑车的姿势也会对…