網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
Winform 中如果需要在一個(gè)固定大小的面板中顯示一些內(nèi)容,并且面板能上下拖動(dòng),將所有的內(nèi)容完整的展示,這種需求很常見(jiàn),下面就演示如何實(shí)現(xiàn)的吧
效果:
1.新建一個(gè)winform 項(xiàng)目,在界面中拖入一個(gè)Panel?
將 panel1 的?AutoScroll 設(shè)置為 True
2.再次拖入一個(gè)?Panel ,將高度拉長(zhǎng),這時(shí)就自動(dòng)出現(xiàn)了滾動(dòng)條,只是此時(shí)里面還沒(méi)有任何內(nèi)容,下面就在 panel2 中加入一點(diǎn)內(nèi)容。
3.在?panel2 中加入一個(gè) Label ,將 AutoSize 設(shè)置為 false
這時(shí),就可以調(diào)整 label 的大小了
將?label1 大小設(shè)置成?panel2 的大小一樣,并且,將位置坐標(biāo)的 x,y 都設(shè)置為0
隨便打一點(diǎn)字,運(yùn)行后,用鼠標(biāo)中輪滾動(dòng),就能看到滾動(dòng)效果了
當(dāng)前的控件擋住了后面的控件,點(diǎn)擊不到,就無(wú)法修改它的屬性,這里分享一個(gè)小技巧,我們找到屬性界面:
找到圖中的這個(gè)下拉框,?直接在下拉框進(jìn)行切換就好了
4.此時(shí) panel 的大小是固定的,如果有的內(nèi)容非常的長(zhǎng),有的比較短,這樣顯示要么會(huì)導(dǎo)致部分內(nèi)容看不到,要么就會(huì)有大量的空白部分,這個(gè)時(shí)候,我們就需要有能自動(dòng)調(diào)整展示面板高度的功能了,下面的代碼是用來(lái)顯示 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 字符串,轉(zhuǎn)換為一個(gè)標(biāo)準(zhǔn)的 Json 模板樣式,
Regex.Split 是根據(jù)換行符號(hào),來(lái)分割 json ,得到 json 的總行數(shù),以便確定 Panel 的行高,得到行高后,就能確定大概的高度了,后面通過(guò) Size 的調(diào)整,就能根據(jù)文本的內(nèi)容,來(lái)確定大概的行高了。
不過(guò)這種方式,只能在有換行符的內(nèi)容中,如果內(nèi)容像新聞一樣,幾千字都沒(méi)有一個(gè)換行符就稍微麻煩一點(diǎn),需要計(jì)算每一行能顯示多少個(gè)文字來(lái)計(jì)算有多少行,不過(guò)能顯示個(gè)大概就行,多幾行空白應(yīng)該不會(huì)有太大的影響吧。
總結(jié)
原文鏈接:https://blog.csdn.net/qq_38693757/article/details/128143791
相關(guān)推薦
- 2022-09-12 docker?清理緩存腳本解析_docker
- 2022-12-08 C語(yǔ)言帶頭雙向循環(huán)鏈表的示例代碼_C 語(yǔ)言
- 2023-02-15 C#?9使用foreach擴(kuò)展的示例詳解_C#教程
- 2022-05-09 Python?matplotlib實(shí)現(xiàn)多重圖的繪制_python
- 2022-06-08 基于Apache?Hudi在Google云構(gòu)建數(shù)據(jù)湖平臺(tái)的思路詳解_Linux
- 2022-07-03 canvas文字居中;canvas畫(huà)布文字右對(duì)齊;canvas畫(huà)布文字左對(duì)齊;canvas文字自動(dòng)換
- 2023-02-05 python??fire庫(kù)的使用實(shí)例教程_python
- 2022-12-24 Android開(kāi)發(fā)中Signal背后的bug與解決_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支