c# 下 ScintillaNET 显示XML信息并折叠节点
winform下显示XML信息(非WPF)
之前使用的是FastColoredTextBox,github地址如下:
https://github.com/PavelTorgashov/FastColoredTextBox
但是有个问题,它支持中文,wordwrap=true,自动换行时,无法正常显示
如果在中文XML下使用它的话,建议加水平滚动条,不要将wordwrap设置为true
因反馈意见,修改控件为ScintillaNET
GitHub - jacobslusser/ScintillaNET: A Windows Forms control, wrapper, and bindings for the Scintilla text editor.A Windows Forms control, wrapper, and bindings for the Scintilla text editor. - jacobslusser/ScintillaNET
https://github.com/jacobslusser/ScintillaNET它本身带的demo显示XML就是基本的显示,无法折叠节点
另外几个比较全面的Demo示例地址:
https://github.com/hgupta9/ScintillaNET.Demo
https://github.com/uuf6429/ScintillaNET-Kitchen
这两个,一个是显示cpp代码状态下的例子,一个是设置样式之类的操作。不符合我修改的内容。
===============================================
代码如下:
Scintilla scintilla = new Scintilla();
scintilla.WrapMode = WrapMode.Word;scintilla.Lexer = Lexer.Xml;
scintilla.Dock = DockStyle.Fill;
//设置XML文本内容
scintilla.Text = File.ReadAllText(filePath, Encoding.UTF8);// Configure folding
scintilla.SetProperty("fold", "1");
scintilla.SetProperty("fold.compact", "1");
scintilla.SetProperty("fold.html", "1");// Set margin for folding symbols
scintilla.Margins[2].Type = MarginType.Symbol;
scintilla.Margins[2].Mask = Marker.MaskFolders;
scintilla.Margins[2].Sensitive = true;
scintilla.Margins[2].Width = 20;// Define folding markers with respective symbols
for (int i = Marker.FolderEnd; i <= Marker.FolderOpen; i++)
{scintilla.Markers[i].SetForeColor(SystemColors.ControlLightLight);scintilla.Markers[i].SetBackColor(SystemColors.ControlDark);
}//折叠的样式配置 1
scintilla.Markers[Marker.Folder].Symbol = MarkerSymbol.BoxPlus;
scintilla.Markers[Marker.FolderOpen].Symbol = MarkerSymbol.BoxMinus;
scintilla.Markers[Marker.FolderEnd].Symbol = MarkerSymbol.BoxPlusConnected;
scintilla.Markers[Marker.FolderMidTail].Symbol = MarkerSymbol.TCorner;
scintilla.Markers[Marker.FolderOpenMid].Symbol = MarkerSymbol.BoxMinusConnected;
scintilla.Markers[Marker.FolderSub].Symbol = MarkerSymbol.VLine;
scintilla.Markers[Marker.FolderTail].Symbol = MarkerSymbol.LCorner;//折叠的样式配置 2
//scintilla.Markers[Marker.Folder].Symbol = MarkerSymbol.CirclePlus ;
//scintilla.Markers[Marker.FolderOpen].Symbol = MarkerSymbol.CircleMinus ;
//scintilla.Markers[Marker.FolderEnd].Symbol = MarkerSymbol.CirclePlusConnected ;
//scintilla.Markers[Marker.FolderMidTail].Symbol = MarkerSymbol.TCorner;
//scintilla.Markers[Marker.FolderOpenMid].Symbol = MarkerSymbol.CircleMinusConnected;
//scintilla.Markers[Marker.FolderSub].Symbol = MarkerSymbol.VLine;
//scintilla.Markers[Marker.FolderTail].Symbol = MarkerSymbol.LCorner;//XML显示的样式信息,包含节点和INNERTEXT,ATTRIBUTE等
scintilla.Styles[ScintillaNET.Style.Xml.Default].Font = "宋体";
scintilla.Styles[ScintillaNET.Style.Xml.Default].Size = 10;
scintilla.Styles[ScintillaNET.Style.Xml.Tag].Font = "Verdana";
scintilla.Styles[ScintillaNET.Style.Xml.Tag].ForeColor = Color.DarkRed;
scintilla.Styles[ScintillaNET.Style.Xml.Tag].Size = 10;
scintilla.Styles[ScintillaNET.Style.Xml.Attribute].Font = "Verdana";
scintilla.Styles[ScintillaNET.Style.Xml.Attribute].ForeColor = Color.Red;
scintilla.Styles[ScintillaNET.Style.Xml.Attribute].Size = 10;
scintilla.Styles[ScintillaNET.Style.Xml.Number].Font = "Verdana";
scintilla.Styles[ScintillaNET.Style.Xml.Number].Size = 10;
scintilla.Styles[ScintillaNET.Style.Xml.TagEnd].Font = "Verdana";
scintilla.Styles[ScintillaNET.Style.Xml.TagEnd].Size = 10;
scintilla.Styles[ScintillaNET.Style.Xml.XmlStart].Font = "Verdana";
scintilla.Styles[ScintillaNET.Style.Xml.XmlStart].Size = 10;
scintilla.Styles[ScintillaNET.Style.Xml.XmlEnd].Font = "Verdana";
scintilla.Styles[ScintillaNET.Style.Xml.XmlEnd].Size = 10;
scintilla.Styles[ScintillaNET.Style.Xml.CData].Font = "Verdana";
scintilla.Styles[ScintillaNET.Style.Xml.CData].Size = 10;
scintilla.Styles[ScintillaNET.Style.Xml.Value].Font = "Verdana";
scintilla.Styles[ScintillaNET.Style.Xml.Value].Size = 10;//显示XML行号
scintilla.Margins[0].Width = 40;
scintilla.Margins[0].Type = MarginType.Number;// Enable automatic folding
scintilla.AutomaticFold = (AutomaticFold.Show | AutomaticFold.Click | AutomaticFold.Change);//自定义对于所有的"<",">" 显示蓝色
int indicatorNumber = 0;
//这个定义的是底色
//scintilla1.Indicators[indicatorNumber].Style = IndicatorStyle.StraightBox;
//这个定义的是字体颜色
scintilla.Indicators[indicatorNumber].Style = IndicatorStyle.TextFore;
scintilla.Indicators[indicatorNumber].ForeColor = Color.Blue;int startPosition = 0;
while (true)
{int position = scintilla.Text.IndexOf(">", startPosition);if (position == -1) break;scintilla.IndicatorCurrent = indicatorNumber;scintilla.IndicatorFillRange(position, 1);startPosition = position + 1;
}startPosition = 0;
while (true)
{int position = scintilla.Text.IndexOf("<", startPosition);if (position == -1) break;scintilla.IndicatorCurrent = indicatorNumber;scintilla.IndicatorFillRange(position, 1);startPosition = position + 1;
}scintilla.ReadOnly = true;
this.Controls.Add(scintilla);
新建一个WINFORM,然后写在load方法中即可。记得添加ScintillaNET的引用,或者在nuget上拉取,都可以。
相关文章:
c# 下 ScintillaNET 显示XML信息并折叠节点
winform下显示XML信息(非WPF) 之前使用的是FastColoredTextBox,github地址如下: https://github.com/PavelTorgashov/FastColoredTextBox 但是有个问题,它支持中文,wordwraptrue,自动换行时&…...
什么叫防御式编程
防御式编程是一种编程策略,主要目的是提高代码的健壮性和可靠性。它假设任何错误都可能发生,并且在设计和编写代码时采取预防措施以防止这些错误导致程序崩溃或产生错误结果。 以下是一些防御式编程的常见实践: 输入验证:总是验证…...
前端优化之图片压缩——tinyPNG
今天前端前辈新介绍的一个压缩图片的工具——tinyPNG,地址:TinyPNG – Compress WebP, PNG and JPEG images intelligently可以将图片压缩,进行优化。 一、使用方法——手动压缩 将超过200kb的图片拖到我标注的红框框里,拖到这里…...
Springboot集成Quartz
Quartz简介 Job 表示一个工作,要执行的具体业务内容。 JobDetail 表示一个具体的可执行的调度程序,Job 是这个可执行程调度程序所要执行的内容,另外 JobDetail 还包含了这个任务调度的方案和策略。 Trigger 代表一个调度参数的配置…...
Android面试题之Kotlin Jetpack组件LifecycleScope
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 在Kotlin中,LifecycleScope是Android Jetpack架构组件的一部分,主要用于简化与生命周期相关的协程管理。 它属于android…...
MySQL深分页优化
MySQL中的深分页问题通常是指当我们通过LIMIT语句查询数据,尤其是在翻到较后面的页码时,性能会急剧下降。例如,查询第1000页的数据,每页10条,系统需要跳过前9990条数据,然后才能获取到所需的记录࿰…...
问题:律师会见委托人的方式包括团体会见和( )。 #职场发展#笔记#学习方法
问题:律师会见委托人的方式包括团体会见和( )。 参考答案如图所示...
Spring Boot中整合Jasypt 使用自定义注解+AOP实现敏感字段的加解密
😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…...
pytorch中的维度变换操作性质大总结:view, reshape, transpose, permute
在深度学习中,张量的维度变换是很重要的操作。在pytorch中,有四个用于维度变换的函数,view, reshape, transpose, permute。其中view, reshape都用于改变张量的形状,transpose, permute都用于重新排列张量的维度,但它们…...
LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划
LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划 文章目录 LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划前言一、题目概述二、解题方法2.1 一维表格的自底向上动态规划2.1.1 思路讲解2.1.2 伪代码 + 逐…...
基于工业互联网打造敏捷供应链的实现方式:创新路径与实践应用
引言 工业互联网和敏捷供应链是当今制造业发展中的两个重要概念。工业互联网以数字化、网络化和智能化为核心,致力于将传统工业生产与互联网技术相融合,从而实现生产过程的高效、智能和灵活。而敏捷供应链则强调快速响应市场需求、灵活调整生产和供应计划…...
碳化硅柱式膜的广泛应用
碳化硅柱式膜是一种高性能的过滤材料,以其独特的性质和广泛的应用领域在现代工业中占据着重要地位。以下是对碳化硅柱式膜的详细介绍: 一、基本概述 碳化硅柱式膜是以碳化硅超滤膜为过滤单元构成的,其过滤精度高达0.1微米。这种膜材料具有耐化…...
【QT】QFont字体设置
设置字体大小 f.setPointSize(12); // 设置字体大小为12点设置字体加粗 f.setBold(true); // 使字体加粗设置字体斜体 f.setItalic(true); // 使字体斜体设置字体下划线 f.setUnderline(true); // 给字体添加下划线设置字体删除线 f.setStrikeOut(true); // 给字体添加删除…...
Vue3+vite部署nginx的二级目录,使用hash模式
修改router访问路径 import { createRouter, createWebHashHistory } from vue-routerconst router createRouter({history: createWebHashHistory (/mall4pc-bbc/),routes: [XXX,] })配置package.json文件 "build:testTwo": "vite build --mode testing --ba…...
云南区块链商户平台发票助手成品
目录 1 概述2 功能对比3 项目演示图4 核心逻辑4.1智能赋码4.2 解密方法4.3 登录与检测4.4 发票金额大写转换4.5 检查登录是否失效4.6 验证码识别5 演示效果6 项目部署6.1 Web站点部署6.1.1 环境6.1.2 前端6.1.3 后端6.2 Docker部署6.2.1 构建镜像6.2.2 创建容器6.3.3 访问项目域…...
AI图书推荐:检索增强生成RAG赋能大语言模型
本书《检索增强生成RAG赋能大型语言模型》(Retrieval-Augmented Generation - Dr. Ray Islam :Mohammad Rubyet )深入探讨了如何通过结合检索系统与神经语言模型,提升人工智能在自然语言处理领域的能力。 以下是各章节内容的概要&…...
高效学习LabVIEW的方法
学习LabVIEW可以通过系统化课程、在线资源、自学实验、参与论坛、结合实际项目等多角度进行。系统课程提供全面基础,在线资源便于查漏补缺,自学实验强化理解,论坛互动解决疑难,结合实际项目应用提高实践技能。结合项目学习是最高效…...
C语言 | Leetcode C语言题解之第136题只出现一次的数字
题目: 题解: class Solution { public:vector<int> singleNumbers(vector<int>& nums) {int eor 0;for (int num:nums)eor ^ num;int rightOne eor & (~eor 1); // 提取出最右的1int onlyOne 0;for (int cur : nums) {if ((cur…...
如何利用Varjo混合现实技术改变飞机维修训练方式
自2017年以来,总部位于休斯顿的HTX实验室一直在推进混合现实技术,与美国空军密切合作,通过其EMPACT平台提供可扩展的沉浸式飞机维护虚拟现实培训。 虚拟和混合现实对维修训练的好处: l 实践技能:提供一个非常接近真实场…...
C++:按指定字符分割字符串
按指定字符分割字符串 [C]对string按指定分隔符分割(split) #include <iostream> #include <vector> #include <string> #include <sstream> using namespace std; int main() {string origin_str "hello world !"; // 需要进行分割的字符串…...
AI时代:重塑核心竞争力
一、企业的核心竞争力重塑未来企业的护城河是AI构建的流程,而不是的数据。 过去我们说数据是石油,但在 LLM 时代,通用数据的价值在被快速拉平。而公司内部独特的、经过千锤百炼的工作流程、决策逻辑、操作手册,这些才是无法被轻易…...
3个秘诀让城通网盘下载提速10倍:ctfileGet工具全解析
3个秘诀让城通网盘下载提速10倍:ctfileGet工具全解析 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet ctfileGet是一款专注于获取城通网盘直连地址的开源工具,通过本地解析技术帮…...
技术解码:ViGEmBus虚拟手柄驱动框架 - 重新定义Windows输入设备模拟的底层架构
技术解码:ViGEmBus虚拟手柄驱动框架 - 重新定义Windows输入设备模拟的底层架构 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是一款基…...
新手避坑指南:PX4飞控连接TFmini、LIDAR Lite V3等定高雷达的完整接线与参数配置(QGC实操)
PX4飞控与定高雷达实战:从接线到参数配置的避坑指南 刚拿到PX4飞控和一堆传感器的新手们,面对密密麻麻的接口和参数设置,是不是有种无从下手的感觉?特别是当你需要连接定高雷达时,不同品牌(北醒TFmini、LID…...
LFM2.5-1.2B-Thinking-GGUF部署教程:Ubuntu/CentOS/Debian三平台通用安装步骤
LFM2.5-1.2B-Thinking-GGUF部署教程:Ubuntu/CentOS/Debian三平台通用安装步骤 1. 平台简介 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,特别适合在资源有限的环境中快速部署。该镜像内置了GGUF模型文件和llama.cpp运行时ÿ…...
TDengine IDMP 工业数据建模 —— 数据标准化
3.4 数据标准化 工业环境通常从多个数据源采集数据,这些数据往往命名不一致、物理单位各异、数据结构不同。如果没有标准化,跨资产分析、AI 生成洞察和数据汇聚将变得不可靠甚至无法实现。TDengine IDMP 提供了多种机制,对整个资产模型中的数…...
BGE-Reranker-v2-m3为何必须用?RAG幻觉过滤入门必看
BGE-Reranker-v2-m3为何必须用?RAG幻觉过滤入门必看 如果你正在搭建RAG系统,或者已经搭建了但总觉得回答质量时好时坏,经常出现“幻觉”——也就是模型一本正经地胡说八道——那你很可能遇到了一个核心问题:向量检索“搜不准”。…...
AI辅助开发:让快马AI智能生成自适应Win10镜像下载管理工具
AI辅助开发:让快马AI智能生成自适应Win10镜像下载管理工具 最近在折腾一个Windows系统镜像下载管理工具,发现传统下载方式存在不少痛点:下载源选择困难、网络波动导致中断、版本特性不透明。正好接触到InsCode(快马)平台的AI辅助开发功能&am…...
Qt桌面应用集成PaddleOCR:从环境搭建到精准识别的实践指南
1. 环境准备:搭建PaddleOCR的Qt开发环境 第一次在Qt里折腾PaddleOCR时,我对着官方文档折腾了半天还是报错,后来发现是第三方库的路径没配好。这里分享下我踩坑后总结的可靠方案。 核心依赖三件套:PaddlePaddle推理库、PaddleOCR C…...
Phi-4-mini-reasoning效果展示:同参数量级中推理准确率超Llama3-8B实测对比
Phi-4-mini-reasoning效果展示:同参数量级中推理准确率超Llama3-8B实测对比 1. 开篇亮点:小模型的大智慧 Phi-4-mini-reasoning这款仅有3.8B参数的轻量级开源模型,正在重新定义我们对小模型能力的认知。作为专为数学推理、逻辑推导和多步解…...
