C# Winform 文本面板带滚动条

news/2024/10/30 15:34:20/

Winform 中如果需要在一个固定大小的面板中显示一些内容,并且面板能上下拖动,将所有的内容完整的展示,这种需求很常见,下面就演示如何实现的吧

效果:

 

1.新建一个winform 项目,在界面中拖入一个Panel 

将 panel1 的 AutoScroll 设置为 True

2.再次拖入一个 Panel ,将高度拉长,这时就自动出现了滚动条,只是此时里面还没有任何内容,下面就在 panel2 中加入一点内容。

3.在 panel2 中加入一个 Label ,将 AutoSize 设置为 false

这时,就可以调整 label 的大小了

将 label1 大小设置成 panel2 的大小一样,并且,将位置坐标的 x,y 都设置为0

随便打一点字,运行后,用鼠标中轮滚动,就能看到滚动效果了

当前的控件挡住了后面的控件,点击不到,就无法修改它的属性,这里分享一个小技巧,我们找到属性界面:

找到图中的这个下拉框, 直接在下拉框进行切换就好了

4.此时 panel 的大小是固定的,如果有的内容非常的长,有的比较短,这样显示要么会导致部分内容看不到,要么就会有大量的空白部分,这个时候,我们就需要有能自动调整展示面板高度的功能了,下面的代码是用来显示 Json 的,可以参考一下:

代码:

using Newtonsoft.Json;
using System;
using System.Drawing;
using System.IO;
using System.Text.RegularExpressions;
using System.Windows.Forms;namespace Test
{public partial class JsonWin : Form{public JsonWin(string json){InitializeComponent();Json= json;}private string Json = string.Empty;private void JsonWin_Load(object sender, EventArgs e){string json = PraseToJson(Json);string[] arr = Regex.Split(json, "\r\n", RegexOptions.IgnoreCase);Size size = label1.Size;Size newSize = new Size(size.Width, arr.Length * 23);label1.Size = newSize;panel2.Size = newSize;label1.Text = json;}public string PraseToJson(string json){try{JsonSerializer s = new JsonSerializer();JsonReader reader = new JsonTextReader(new StringReader(json));Object jsonObject = s.Deserialize(reader);StringWriter sWriter = new StringWriter();JsonWriter writer = new JsonTextWriter(sWriter);writer.Formatting = Newtonsoft.Json.Formatting.Indented;s.Serialize(writer, jsonObject);return sWriter.ToString();}catch (Exception){return json;}}}
}

PraseToJson 方法可以将连在一起的 json 字符串,转换为一个标准的 Json 模板样式,

Regex.Split 是根据换行符号,来分割 json ,得到 json 的总行数,以便确定 Panel 的行高,得到行高后,就能确定大概的高度了,后面通过 Size 的调整,就能根据文本的内容,来确定大概的行高了。

不过这种方式,只能在有换行符的内容中,如果内容像新闻一样,几千字都没有一个换行符就稍微麻烦一点,需要计算每一行能显示多少个文字来计算有多少行,不过能显示个大概就行,多几行空白应该不会有太大的影响吧。

end


http://www.ppmy.cn/news/1127.html

相关文章

MySQL密码不要用0开头!!!

我是真的服了……花了大半天连云服务器上的数据库…… 开始时用SQLyog,显示authentication plugin caching_sha2_password cannot be loaded;,搜索了一通,找到解决方案: ALTER USER username% IDENTIFIED WITH mysql_native_pas…

机器学习6scikit-learn中的scaler

文章目录一、scikit-learn中的scaler对测试数据集如何归一化?测试数据是模拟真实环境:综上二、演示一、scikit-learn中的scaler 对测试数据集如何归一化? 测试数据集不能跟训练数据集归一化一样,应该把测试数据集与训练数据集归…

17:00面试,17:09就出来了 ,问的实在是太...

从外包出来,没想到算法死在另一家厂子 自从加入这家公司,每天都在加班,钱倒是给的不少,所以也就忍了。没想到8月一纸通知,所有人不许加班,薪资直降30%,顿时有吃不起饭的赶脚。 好在有个兄弟内…

思科防火墙——实验练习加命令

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.实验练习 1.实验(1)配置ASA接口 2.实…

简单入门编写html登录界面

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>你好呀&#xff0c;登录吧</title><style&…

混合动力电动车优化调度与建模(发动机,电机,电池组等组件建模)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f4dd;目前更新&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;电力系统相关知识&#xff0c;期刊论文&…

java计算机毕业设计基于springboot电商项目(附源码讲解)

目录 1. 用户端 1.1 主页&#xff08;未登录时可以查看商品但是不可以购买&#xff09; 1.2 登录&#xff08;账号密码登录) 1.3 登录&#xff08;手机验证码登录&#xff09; 1.4 注册 1.5 查看商品详情 1.6 将商品加入购物车 1.7 在商品购物车中选中商品购买 1.8 …

Spring MVC使用SessionLocaleResolver实现用户自定义切换语言实例

在许多成熟的商业软件系统中可以让用户自由切换语言&#xff0c;而不是修改浏览器的语言设置。一旦用户选择了自己需要使用的语言环境&#xff0c;整个系统的语言环境将一直是这种语言环境。 Spring MVC 也可以允许用户自行选择程序语言。本章通过 Web 应用 springMVCDemo09 演…