網站首頁 編程語言 正文
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 的調整,就能根據文本的內容,來確定大概的行高了。
不過這種方式,只能在有換行符的內容中,如果內容像新聞一樣,幾千字都沒有一個換行符就稍微麻煩一點,需要計算每一行能顯示多少個文字來計算有多少行,不過能顯示個大概就行,多幾行空白應該不會有太大的影響吧。
總結
原文鏈接:https://blog.csdn.net/qq_38693757/article/details/128143791
相關推薦
- 2022-09-18 Go語言實現文件上傳_Golang
- 2022-04-16 pycharm如何設置自動生成作者信息_python
- 2023-01-19 python全局解釋器GIL鎖機制詳解_python
- 2022-05-31 如何用python合并多個有規則命名的nc文件_python
- 2022-11-15 如何使用ASP.NET?Core?配置文件_實用技巧
- 2022-03-24 .Net?Core服務治理Consul使用服務發現_自學過程
- 2022-06-16 Python數據結構之遞歸可視化詳解_python
- 2022-04-18 前端,服務端渲染引入第三方依賴window全局對象的插件,window is not defined
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支