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/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.mzph.cn/news/849065.shtml

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

相关文章

玩物科技:引领物联网时代的创新先锋

在深圳这座充满活力和创新精神的城市&#xff0c;有一家年轻而充满潜力的公司正在悄然改变我们的日常生活。深圳市玩物科技有限公司自2017年成立以来&#xff0c;凭借其卓越的技术和创新理念&#xff0c;逐渐成为物联网时代的先锋力量。 玩物科技的愿景与使命 玩物科技的核心…

【vue3响应式原理】

# 源码结构 源码位置是在packages文件件内&#xff0c;实际上源码主要分为两部分&#xff0c;编译器和运行时环境 1. 编译器 compiler-core 核心编译逻辑compiler-dom 针对浏览器平台编译逻辑compiler-sfc 针对单文件组件编译逻辑compiler-ssr 针对服务端渲染编译逻辑 2. 运行时…

使用kafka tools工具连接带有用户名密码的kafka

使用kafka tools工具连接带有用户名密码的kafka 创建kafka连接&#xff0c;配置zookeeper 在Security选择Type类型为SASL Plaintext 在Advanced页面添加如下图红框框住的内容 在JAAS_Config加上如下配置 需要加的配置&#xff1a; org.apache.kafka.common.security.plain.Pla…

企业数字化转型的主要方面有哪些?

本人研究企业数字化转型10余年&#xff0c;为企业软件选型、数字化提供咨询服务&#xff01;目前重点研究低代码数字化转型玩法&#xff0c;力争为各行各业探索出一条最具性价比的数字化方式。 关于“企业数字化转型包括哪些方面”这个问题&#xff0c;咱先来看个例子哈~ 比如…

用负载绿原酸的纳米复合水凝胶调节巨噬细胞表型以加速伤口愈合

引用信息 文 章&#xff1a;Modulating macrophage phenotype for accelerated wound healing with chlorogenic acid-loaded nanocomposite hydrogel. 期 刊&#xff1a;Journal of Controlled Release&#xff08;影响因子&#xff1a;10.8&#xff09; 发表时间&a…

基于pytoch卷积神经网络水质图像分类实战

具体怎么学习pytorch&#xff0c;看b站刘二大人的视频。 完整代码&#xff1a; import numpy as np import os from PIL import Image import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data…

resultType的类型错误

resultType的类型错误&#xff0c;不能是List而应该是对应的返回Bean对象的类型&#xff0c;VO 这里是引用 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: Error querying database. Cause: java.lang…

opencv进阶 ——(十二)基于三角剖分实现人脸对齐

三角剖分概念 三角剖分&#xff08;Triangulation&#xff09;是一种将多边形或曲面分解为一系列互不相交的三角形的技术&#xff0c;它是计算几何、计算机图形学、地理信息系统、工程和科学计算中的一个基本概念。通过三角剖分&#xff0c;复杂的形状可以被简化为基本的三角…

病理级Polymer酶标二抗IHC试剂盒上线!

免疫组织化学 Immunohistochemistry,lHC 是利用抗体与抗原特异性识别原理&#xff0c;对组织样本中的抗原进行定位/定性分析的实验技术。组织切片保留了样品的解剖学结构特征&#xff0c;从而可以高分辨率地显现蛋白在细胞&#xff0c;甚至细胞器中的定位。基于以上特性&…

Apple - Image I/O Programming Guide

翻译自&#xff1a;Image I/O Programming Guide&#xff08;更新时间&#xff1a;2016-09-13 https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/ImageIOGuide/imageio_intro/ikpg_intro.html#//apple_ref/doc/uid/TP40005462 文章目录 …

orbslam2代码解读(1):数据预处理过程

写orbslam2代码解读文章的初衷 首先最近陆陆续续花了一两周时间学习视觉slam&#xff0c;因为之前主要是做激光slam&#xff0c;有一定基础所以学的也比较快&#xff0c;也是看完了视觉14讲的后端后直接看orbslam2的课&#xff0c;看的cvlife的课&#xff08;课里大部分是代码…

jenkins的简单使用

2.1.简介 Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续集成变成可能。 2.4.Jenkins安装 1.下载安装包jenkins.war&#xff1b; 2.在安装…

笔记 | 软件工程04:软件项目管理

1 软件项目及其特点 1.1 什么是项目 1.2 项目特点 1.3 影响项目成功的因素 1.4 什么是软件项目 针对软件这一特定产品和服务的项目努力开展“软件开发活动",&#xff08;理解&#xff1a;软件项目是一种活动&#xff09; 1.5 软件项目的特点 1.6 军用软件项目的特点 2 …

怎么用电脑把图片转换二维码?图片在线生成二维码的步骤内容

现在很多人会通过二维码来存储物品的信息图片&#xff0c;其他人可以通过扫描二维码的方式来查看对应的图片内容&#xff0c;那么当我们需要将一批图片每个单独生成二维码&#xff0c;该如何操作能够快速将图片转换二维码呢&#xff1f; 今天&#xff0c;小编来分享给大家一个…

CNN卷积神经网络

一、概述 卷积神经网络&#xff08;CNN&#xff09;是深度学习领域的重要算法&#xff0c;特别适用于处理具有网格结构的数据&#xff0c;比如说图像和音频。它起源于二十世纪80至90年代&#xff0c;但真正得到快速发展和应用是在二十一世纪&#xff0c;随着深度学习理论的兴起…

【ai】phc:安装issac环境且fix libstdc++.so 版本报错

Pycharm远程连接服务器(2023-11-9) 大神分享了pycharm远程连接ubuntu工作站的方法。 https://github.com/ZhengyiLuo/PHC 给出的操作同样适用: 参考 Pycharm远程连接服务器(2023-11-9) :前提是一样的 PHC的要求:isaac 创建 conda activate isaac

【Vue】scoped解决样式冲突

默认情况下写在组件中的样式会 全局生效 → 因此很容易造成多个组件之间的样式冲突问题。 全局样式: 默认组件中的样式会作用到全局&#xff0c;任何一个组件中都会受到此样式的影响 局部样式: 可以给组件加上scoped 属性,可以让样式只作用于当前组件 一、代码示例 BaseOne…

RocketMQ可视化界面安装

RocketMQ可视化界面安装 **起因&#xff1a;**访问rocketmq-externals项目的git地址&#xff0c;下载了源码&#xff0c;在目录中并没有找到rocketmq-console文件夹。 git下面文档提示rocketMQ的仪表板转移到了新的项目中&#xff0c;点击仪表板到新项目地址&#xff1b; 下载…

搜索与图论:宽度优先搜索

搜索与图论&#xff1a;宽度优先搜索 题目描述参考代码 题目描述 输入样例 5 5 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0输出样例 8参考代码 #include <iostream> #include <algorithm> #include <cstring> using namespace std;const int N …

VsQt单元测试目录的管理方式

正常项目的文件管理方式 正常项目的目录&#xff0c;是由文件系统中实际的文件夹进行分类管理的。 但是如果单元测试用实际文件夹管理的话&#xff0c;会出现问题&#xff0c;就是被测类太多了&#xff0c;用文件系统管理的话&#xff0c;不太方面查看&#xff0c;如下图所示。…