当前位置: 首页 > news >正文

套路化编程 C# winform 自适应缩放布局

        本例程实现基本的自适应缩放布局。

        在本例程中你将会学习到如何通过鼠标改变界面比例(SplitContainer)、如何使用流布局(FlowLayoutPanel)排列控件,当然首先需要了解如何设置控件随窗口缩放。

目录

创建项目

​编辑 控件自适应缩放

使用SplitContainer调整界面比例

放置split控件

将已有控件放入容器

 使用流布局容器FlowLayoutPanel

放置flow控件

设置属性 

增加控件

运行效果 

用代码协调布局


创建项目

        用VS2022创建一个新项目:

        选择“windows窗体应用”。.net的命名体系是微软改名部的杰作,乱得比粥更乱,Framework已经停止更新了,做新的程序就别用了。WPF不太会,MFC过来的人比较习惯winform。下一代技术不明朗,不着急。

        框架选择8.0:

         选别的应该是差不多的。

        然后就进入项目了:

        编译运行就是这样:

 控件自适应缩放

        首先我们来实现控件的自适应缩放。

        从工具箱(如果没有打开可以在菜单的【视图】下面找到“工具箱”)选择一个文本框(随便什么都行),放在窗体上:

        默认的名字是textBox1,以后要用这个名字来选择控件设置属性。

        现在编译运行程序,主窗口是可以缩放的,但编辑框位置不会改变:

 

        修改编辑框的布局:

        将Anchor改为四面都选中,如上图红框,再运行程序,用鼠标拉伸窗口: 

 

        现在编辑框会变长了,却不会变高,这是因为单行编辑框不支持变高。将属性的Mutilline改为true就可以变高:

         Anchor的作用很容易理解,就是锁定控件边框和父窗体边框的距离,这样就实现了自动缩放。

使用SplitContainer调整界面比例

放置split控件

        现在给主窗体增加一个SplitContainer控件:

        注意红框里的控件名字,容器类控件在设计视图上很难选中,一不小心就点到子控件了,所以要记住名字,在属性窗口做选择。

        将容器控件拉大一些,可以用鼠标拖动中间的分隔条改变比例,如果不小心点到了子空间里面,就在属性窗口重新选择容器。

将已有控件放入容器

        确保容器的Panel2足以放下之前创建的编辑框,把编辑框拖放到Panel2上:

        放进去以后尺寸变得太小了,调整大一些:

         编辑框的Anchor属性仍然没有变,只是改变了父子关系。

        现在对容器也设置Anchor属性为四边都锁定:

         前面已经说了很难在设计窗口选中容器,所以要在属性窗口选择。然后运行程序:

         红线处应该有一条黑线可供拖动的,截图出来没有了。

        现在我们已经明白这个容器的运作机制了。然后我们把界面调整好看一些:

        容器拖放到最大,编辑控件也拖放到最大,再放一个控件到左边面板:

        左边是运行效果,右边是设计,随意缩放和改变比例:

 使用流布局容器FlowLayoutPanel

放置flow控件

        首先把SplitContainer缩小:

        然后从工具箱放置一个FlowLayoutPanel,放在刚才腾出的空位置上:

设置属性 

        FlowLayoutPanel位置和属性调整一下:

 ​​​​​

        Anchor改一下,改成三面锁定,如上图,“Top,Left,Right”。再将AutoSize设置为“True”,大小会根据内容自动变化。与缩放相关的选项可能会互相干扰,上面的操作是在默认属性基础上改两个,如果对效果有疑惑,删掉重新来。

增加控件

         现在拖放一些控件到flow面板上,我放了5个按钮:

运行效果 

        什么属性都不用改,直接运行程序就可以看到FlowLayoutPanel的自动排列效果了:

 

        挺不错的。想想看是不是缺了什么?

用代码协调布局

        自动拉伸的flow控件把下面的Split容器遮盖了。如何解决呢?用一点点代码就可以解决了。

        给窗口增加Resize事件的处理程序,在属性的事件里的Resize后面的编辑区域双击即可自动增加处理程序:

         编辑代码:

		private void Form1_Resize(object sender, EventArgs e){int flowHeight = 0;foreach (Control v in this.flowLayoutPanel1.Controls){int tmp = v.Location.Y + v.Height;if (tmp > flowHeight) flowHeight = tmp;}this.splitContainer1.Top = flowHeight + 3;}

         这段代码依赖两个容器的名字,但不依赖flow容器的子容器的名字。

        运行效果如下:

        split容器的子控件的内容没有被遮盖。 

        注意把flow容器的尺寸设置为刚好容纳一行按钮,因为代码假设了按钮和split容器的距离是3,实际中可以跟需要调整。

(这里是结束)

相关文章:

套路化编程 C# winform 自适应缩放布局

本例程实现基本的自适应缩放布局。 在本例程中你将会学习到如何通过鼠标改变界面比例(SplitContainer)、如何使用流布局(FlowLayoutPanel)排列控件,当然首先需要了解如何设置控件随窗口缩放。 目录 创建项目 ​编辑…...

源码梳理(3)MybatisPlus启动流程

文章目录 1,MybatisPlus的使用示例2,BaseMapper方法的执行2,1 MybatisMapperProxy代理对象2.2 InvocationHandler接口(JDK动态代理)2.3 MapperMethodInvoker接口2.4 MybatisMapperMethod 3,SqlSession的执行流程3.1 Sq…...

《学成在线》微服务实战项目实操笔记系列(P1~P49)【上】

《学成在线》项目实操笔记系列【上】,跟视频的每一P对应,全系列12万字,涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳,参考这篇,相信会带给你极大启发。同时也欢迎大家提问与讨论,我会尽力帮大家解…...

两种添加删除属性字段的方法

水经微图(简称“微图”)中的图层均有属性字段,无论是复合图层,还是点线面图层的字段都可以根据实际情况进行添加或删除。 这里,就为你分享两种添加删除字段的方法。 添加删除字段方法一 当需要添加删除图层的属性字…...

ObjectMapper之处理JSON序列化和反序列化

目录 基本示例Java 对象转 JSON 字符串(序列化)JSON 字符串转 Java 对象(反序列化) 高级特性忽略未知属性使用注解自定义序列化 当然可以。让我们通过更详细的例子来探索 ObjectMapper 的使用,包括基本的序列化和反序…...

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(八)

原文:Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者:飞龙 协议:CC BY-NC-SA 4.0 第十八章:强化学习 强化学习(RL)是当今最激动人心的机器学习领域之一,也是最古老…...

【51单片机】直流电机实验和步进电机实验

目录 直流电机实验直流电机介绍ULN2003 芯片介绍硬件设计软件设计实验现象 步进电机实验步进电机简介步进电机的工作原理步进电机极性区分双极性步进电机驱动原理单极性步进电机驱动原理细分驱动原理 28BYJ-48 步进电机简介软件设计 橙色 直流电机实验 在未学习 PWM 之前&…...

django+flask网上购物商城系统的设计与实现python-vue

全球经济在快速的发展,中国更是进步飞速,这使得国内的互联网技术进入了发展的高峰时期,这让中外资本不断转向互联网这个大市场[3]。在这个信息高度发达的现在,利用网络进行信息管理改革已经成为了人们追捧的一种趋势。“网上购物系…...

公共用例库计划--个人版(六)典型Bug页面设计与开发

1、任务概述 本次计划的核心任务是开发一个,个人版的公共用例库,旨在将各系统和各类测试场景下的通用、基础以及关键功能的测试用例进行系统性地归纳整理,并以提高用例的复用率为目标,力求最大限度地减少重复劳动,提升…...

impala与kudu进行集成

文章目录 概要Kudu与Impala整合配置Impala内部表Impala外部表Impala sql操作kuduImpala jdbc操作表如果使用了Hadoop 使用了Kerberos认证,可使用如下方式进行连接。 概要 Impala是一个开源的高效率的SQL查询引擎,用于查询存储在Hadoop分布式文件系统&am…...

链表经典算法(+OJ刷题)

文章目录 前言一、移除链表元素二、链表的中间节点三.反转链表四.合并两个有序链表五.分割链表六.环形链表的约瑟夫问题总结 创作不易,点赞收藏一下呗!!! 前言 在上一节,我们介绍了单链表的增,删&#xff…...

网络原理TCP/IP(4)

文章目录 面向字节流粘包问题异常情况TCP小结 面向字节流 创建⼀个TCP的socket,同时在内核中创建⼀个发送缓冲区和⼀个接收缓冲区; • 调⽤write时,数据会先写⼊发送缓冲区中; • 如果发送的字节数太⻓,会被拆分成多个TCP的数据包发出; • 如果发送的字节数太短,就会先在缓…...

【C/C++ 11】贪吃蛇游戏

一、题目 贪吃蛇游戏机制是通过控制蛇上下左右移动并吃到食物得分。 蛇头碰到墙壁或者碰到蛇身就游戏结束。 食物随机生成,蛇吃到食物之后蛇身变长,蛇速加快。 二、算法 1. 初始化游戏地图并打印,地图的边缘是墙,地图的每个坐…...

【日常总结 - java】list 与 字符串(用逗号隔开)相互转换

一、list 转 字符串 第一种:使用谷歌Joiner方法 (推荐) 第二种:循环插入逗号 第三种:stream流 (推荐) 第四种:lambda表达式遍历并加入逗号 二、字符串 转 list 方法一:使用split()方法 方法二:使用C…...

《幻兽帕鲁》好玩吗?幻兽帕鲁能在Mac上运行吗?

最近一款叫做《幻兽帕鲁》的新游戏走红,成为了Steam游戏平台上,连续3周的销量冠军,有不少Mac电脑用户,利用Crossover成功玩上了《幻兽帕鲁》,其实Crossover已经支持很多3A游戏,包括《赛博朋克2077》《博德之…...

【数据分享】1929-2023年全球站点的逐日平均能见度(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,说到常用的降水数据,最详细的降水数据是具体到气象监测站点的降水数据! 有关气象指标的监测站点数据,之前我们分享过1929-2023年全…...

浅谈——开源软件的影响力

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 ✨特色专栏&#xff1a…...

MySQL-事务(TRANSACTION)

文章目录 1. 事务概述2. 事务的四大特性(ACID)3. 控制事务4. 并发事务产生的问题5. 事务的隔离级别6. 拓展6.1 InnoDB如何解决幻读?6.2 MySQL实现事务的原理? 1. 事务概述 定义:数据库的事务( Transaction…...

Vue 实现动态路由

Vue 实现动态路由 Vue中实现动态路由主要涉及到两个方面:一是路由的动态添加,二是基于路由的参数变化来动态渲染组件。这通常在使用Vue Router时进行配置和实现。以下是实现动态路由的一些基本步骤和概念: 安装和设置Vue Router npm insta…...

docker elasticsearch8启动失败

docker elasticsearch8.12.0启动后提示这个,并且始终无法访问localhost:9200 received plaintext http traffic on an https channel, closing connection Netty4HttpChannel 解决方案:重新创建 elasticsearch容器,加上 -e xpack.security.…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...