c# 下 ScintillaNET 显示XML信息并折叠节点

news2024/11/23 16:38:37

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/ScintillaNETicon-default.png?t=N7T8https://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上拉取,都可以。

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

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

相关文章

[大模型]Gemma-2B-Instruct FastApi 部署调用

环境准备 在 平台中租赁一个 3090 等 24G 显存的显卡机器&#xff0c;如下图所示镜像选择 PyTorch-->2.1.0-->3.10(ubuntu22.04)-->12.1。 接下来打开刚刚租用服务器的 JupyterLab&#xff0c;并且打开其中的终端开始环境配置、模型下载和运行演示。 pip 换源加速下载…

【IoT NTN】3GPP R18中关于各类IoT设备在NTN中的增强和扩展

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G技术研究。 博客内容主要围绕…

Nginx学习笔记(十)如何配置HTTPS协议?(公网)

目录 一、简介二、SSL 证书类型介绍三、公网 SSL 证书3.1 证书管理工具3.2 下载安装 acme.sh3.3 申请并下载证书报错1&#xff1a;没有指定账号报错2&#xff1a;DNS无法解析的域名报错3&#xff1a;无效的响应 404 3.4 配置 Nginx3.5 证书过期刷新 四、补充4.1 同一域名的不同…

Unity API学习之消息机制理论与应用

目录 消息机制 示例1&#xff1a;同一物体中不同组件之间发送消息 示例2&#xff1a;父与子对象之间的消息发送(BroadcastMassage) 父对象向子对象发送消息 ​编辑 子对象向父对象发送消息 消息机制 在Unity中&#xff0c;SendMessage 方法用于在游戏对象及其所有子对象上…

【云岚到家】-day02-2-客户管理-认证授权

【云岚到家】-day02-2-客户管理-认证授权 第二章 客户管理1 认证模块1.1 需求分析1.2 小程序认证1.2.1 测试小程序认证1.2.1.1 参考官方流程1.2.1.2 申请小程序账号1.2.1.3 创建jzo2o-customer1.2.1.4 部署前端1.2.1.5 编译运行1.2.1.6 真机调试 2 阅读代码2.1 小程序认证流程2…

虚拟机ping不通主机,但是主机可以ping通虚拟机

我在Windows10系统安装了虚拟机&#xff0c;设置的主机与虚拟机的连接方式是桥接&#xff0c;安装好后&#xff0c;发现虚拟机ping不通主机&#xff0c;但是主机可以ping通虚拟机。 我的操作是&#xff1a;关闭防火墙&#xff0c;发现虚拟机可以ping通主机了。说明是Windows10…

设计高并发秒杀系统:保障稳定性与数据一致性

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. 系统架构设计 1. 系统架构图 二、 系统流程 三…

AI绘画工具Ideogram测评:和Midjourney不分伯仲的AI图像工具之一

Ideogram 是一款令人印象深刻的人工智能图像工具&#xff0c;但尽管它于去年 8 月推出并具有不可思议的文本渲染能力&#xff0c;但它并没有引起其他一些更引人注目的 GenAI 服务的关注。 随着该公司推出其生成式人工智能模型 1.0 版本&#xff0c;这种情况即将发生改变&#…

详解 Flink 的容错机制

一、检查点 Checkpoint 1. 介绍 有状态流应用中的检查点&#xff08;checkpoint&#xff09;&#xff0c;其实就是所有任务的状态在某个时间点的一个快照&#xff08;一份拷贝&#xff09;&#xff0c;这个时间点应该是所有任务都恰好处理完一个相同的输入数据的时刻。在一个流…

帕友的小贴士,锻炼

帕金森病作为一种慢性神经系统疾病&#xff0c;对患者的生活质量产生了深远的影响。虽然医学界对于帕金森病的治疗仍在不断探索&#xff0c;但合理的锻炼已经被证实是改善患者症状、提高生活质量的有效途径之一。本文旨在为帕金森病患者推荐一些适合的锻炼方法&#xff0c;帮助…

2024 年最佳 iPhone 数据恢复软件

最好的 iPhone 数据恢复软件是什么&#xff1f; 说到 iPhone 数据恢复&#xff0c;拥有合适的软件对于恢复丢失或删除的文件至关重要&#xff0c;无论是照片、视频、消息、联系人还是其他重要数据。那么&#xff0c;最好的 iPhone 数据恢复软件是什么&#xff1f;有几个因素有…

使用C++结合OpenCV进行图像处理与分类

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

力扣hot100: 48. 旋转图像

LeetCode&#xff1a;48. 旋转图像 受到力扣hot100&#xff1a;54. 螺旋矩阵的启发&#xff0c;我们可以对旋转图像按层旋转&#xff0c;我们只需要记录四个顶点&#xff0c;并且本题是一个方阵&#xff0c;四个顶点就能完成图像的旋转操作。 1、逐层旋转 注意到&#xff0…

设计随笔 ---- ADR4525 篇

ADR4525一颗超低噪声、高精度2.5V基准电压源&#xff1b; Fluke 17B准确度指标&#xff1a; ADR4525指标&#xff1a; Fluke 17B测试结果&#xff1a; 2.5V的基准&#xff0c;输出只有2.477V&#xff0c;其实这么高精度的电压基准用3位半的万用表来测试本身就是一个错误&#…

3-哈希表-51-四数相加 II-LeetCode454

3-哈希表-51-四数相加 II-LeetCode454 LeetCode: 题目序号454 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&#xff…

《QT实用小工具·七十》openssl+qt开发的P2P文件加密传输工具

1、概述 源码放在文章末尾 该项目实现了P2P的文件加密传输功能&#xff0c;具体包含如下功能&#xff1a; 1、 多文件多线程传输 2、rsaaes文件传输加密 3、秘钥随机生成 4、断点续传 5、跨域传输引导服务器 项目界面如下所示&#xff1a; 接收界面 发送界面 RSA秘钥生成…

(二)深度学习基础练习题(54道选择题)

本文整理了深度学习基础知识相关的练习题&#xff0c;共54道&#xff0c;适用于想巩固深度学习基础的同学。来源&#xff1a;如荷学数据科学题库&#xff08;技术专项-深度学习&#xff09;。 1&#xff09; 2&#xff09; 3&#xff09; 4&#xff09; 5&#xff09; 6&#…

【CW32F030CxTx StartKit开发板】开发资料

本来是参加21ic的评测活动&#xff0c;不知道为什么评测文章一直被提示有不良内容&#xff0c;所以只好先在此记录一下相关的资料。 此次测试的是CW32F030CxTxStartKit 评估板。该开发板为用户提供一种经济且灵活的方式使用 CW32F030CxTx 芯片构建系统原型&#xff0c;可进行性…

插卡式仪器模块:音频分析模块(插卡式)

• 24 位分辨率 • 192 KHz 采样率 • 支持多种模拟音频信号的输入/输出 应用场景 • 音频信号分析&#xff1a;幅值、频率、信噪比、THD、THDN 等指标 • 模拟音频测试&#xff1a;耳机、麦克风、扬声器测试&#xff0c;串扰测 音频分析仪 输入阻抗10 TΩ10 TΩ输入范围3…

第103天: 权限提升-Linux 系统辅助项目脏牛Dirty内核漏洞SUIDGUID

项目下载地址 综合类探针&#xff1a; https://github.com/liamg/traitor 自动化提权&#xff1a; https://github.com/AlessandroZ/BeRoot 信息收集&#xff1a; https://github.com/rebootuser/LinEnum https://github.com/sleventyeleven/linuxprivchecker 漏洞探针&#xf…