套路化编程 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,实际中可以跟需要调整。

(这里是结束)

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

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

相关文章

【stm32】hal库学习笔记-ADC模数转换(超详细!)

【stm32】hal库学习笔记-ADC模数转换(超详细!) 本篇章介绍了ADC实现电压检测的三种方式 ADC原理及选型 ADC将连续的模拟电压信号转换为二进制的数字信号 选型参数 速度(采样频率) 功耗 精度 转换原理 ADC hal库驱…

Linux进程信号(2)--信号的保存

目录 1.阻塞信号 1.1 信号其他相关常见概念 1.实际执行信号的处理动作称为信号递达(Delivery) 2.信号从产生到递达之间的状态,称为信号未决(Pending)。 3.进程可以选择阻塞 (Block )某个信号。 1.2信号在内核中的表示 sigset_t 信号集操作函数 使用sigprocm…

安全基础~通用漏洞4

文章目录 知识补充XSS跨站脚本**原理****攻击类型**XSS-后台植入Cookie&表单劫持XSS-Flash钓鱼配合MSF捆绑上线ctfshow XSS靶场练习 知识补充 SQL注入小迪讲解 文件上传小迪讲解 文件上传中间件解析 XSS跨站脚本 xss平台: https://xss.pt/ 原理 恶意攻击者…

802.11n 802.11ac (WiFi 4/5 )的核心要点

802.11n 802.11ac (WiFi 4/5 )是什么? WiFi 4: Ieee 802.11n Enhancements for High Throughput (HT) WiFi 5: Ieee 802.11ac Enhancements for Very High Throughput (VHT&#x…

4.0 HDFS 配置与使用

之前提到过的 Hadoop 三种模式:单机模式、伪集群模式和集群模式。 单机模式:Hadoop 仅作为库存在,可以在单计算机上执行 MapReduce 任务,仅用于开发者搭建学习和试验环境。 伪集群模式:此模式 Hadoop 将以守护进程的…

MacOS Mojavev10.14.6

MacOS Mojave v10.14.6系统安装包是一款专为Mac用户设计的操作系统软件包。Mojave是苹果公司为Mac设备开发的一个操作系统版本,它提供了许多新功能和改进,旨在提高Mac用户的使用体验和工作效率。 安装MacOS Mojave v10.14.6系统后,用户可以享…

蓝桥杯Web应用开发-display属性

display 属性 专栏持续更新中 display 属性可以用来设置元素在页面上的排列方式,也可用来隐藏元素。 display 属性值的说明如下表所示。 属性值说明block元素以块级方式展示。inline元素以内联方式展示。inline-block元素以内联块的方式展示。none隐藏元素。 b…

微信小程序之本地生活案例的实现

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

算法学习——华为机考题库8(HJ46 - HJ55)

算法学习——华为机考题库8(HJ46 - HJ50) HJ46 截取字符串 描述 输入一个字符串和一个整数 k ,截取字符串的前k个字符并输出 数据范围: 字符串长度满足 1≤n≤1000 , 1≤k≤n 输入描述: 1.输入待截取的…

代码随想录算法训练营Day24 | 回溯理论基础、77.组合

回溯理论基础 回溯和递归是相辅相成的,只要有递归就有回溯(执行完一次递归就自动回溯到上一层) 回溯的效率 回溯不是一个高效的算法,而是一个纯暴力的过程 有些问题没有更好的解法,只能使用暴力搜索,这时…

ReactNative实现的横向滑动条

OK,我们先看下效果图 注意使用到了两个库 1.react-native-linear-gradient 2.react-native-gesture-handler ok,我们看下面的代码 import {Image, TouchableWithoutFeedback, StyleSheet, View} from react-native; import LinearGradient from reac…

Linux---信号

前言 到饭点了,我点了一份外卖,然后又开了一把网游,这个时候,我在打游戏的过程中,我始终记得外卖小哥会随时给我打电话,通知我我去取外卖,这个时候游戏还没有结束。我在打游戏的过程中需要把外…

考研中常见的算法-逆置

元素逆置 概述:其实就是将 第一个元素和最后一个元素交换,第二个元素和倒数第二个元素交换,依次到中间位置。用途:可用于数组的移动,字符串反转,链表反转操作,栈和队列反转等操作。 逆置图解 …

vulhub中Apache APISIX 默认密钥漏洞复现(CVE-2020-13945)

Apache APISIX是一个高性能API网关。在用户未指定管理员Token或使用了默认配置文件的情况下,Apache APISIX将使用默认的管理员Token edd1c9f034335f136f87ad84b625c8f1,攻击者利用这个Token可以访问到管理员接口,进而通过script参数来插入任意…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Menu组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Menu组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Menu组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不同时区的时间…

leetcode142 环形链表 II

文章目录 1. 解法:快慢指针2. 原题 [142. 环形链表 II](https://leetcode.cn/problems/linked-list-cycle-ii/) 1. 解法:快慢指针 定义两个指针fast和slow,同时从链表头出发,fast每次走两步,slow每次走1步&#xff0c…

ShardingSphere 5.x 系列【5】Spring Boot 3.1 集成Sharding Sphere-JDBC并实现读写分离

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 概述2. 使用限制3. 案例演示3.…

[Angular 基础] - 数据绑定(databinding)

[Angular 基础] - 数据绑定(databinding) 上篇笔记,关于 Angular 的渲染过程及组件的创建&简单学习:[Angular 基础] - Angular 渲染过程 & 组件的创建 Angular 之中的 databinding 是一个相对而言更加复杂,以及我个人觉得相对而言比…

算法笔记刷题日记——3.简单入门模拟 3.1简单模拟

刷题日记 3.1 简单模拟 此类题型根据题目描述进行代码的编写,考察代码能力,刷题记录如下: B1001 B1032 B1016 B1026 B1046 B1008 B1012 B1018 A1042 A1046 A1065 B1010 A1002 A1009 错题记录 B1008 数组元素循环右移问题 一个数组_A_中存有…

[机缘参悟-145] :一个软件架构师对佛学的理解 -9- 修行的目标和层次:净心、智慧和解脱

目录 前言: 第一层次(小乘):净心,摆脱痛苦和烦扰,进入平静和安宁 1.1 什么是净心 1.2 如何达到净心的状态 1.3 "常乐我净" 第二层次(中乘):智慧&#xf…