前言
ICSharpCode .文本编辑器是一款非常不错的。网代码编辑控件,内置了多种高亮语言支持,同时完美支持中文,非常赞!
先来看一下运行效果:
一、项目结构
这里需要注意解放运动文件夹下导入的类库,这个演示需要这些dll .
二、代码折叠
需要实现IFoldingStrategy中的GenerateFoldMarkers方法,代码如下:
使用ICSharpCode .文本编辑器。文档;使用系统;使用系统。集合。通用;使用系统Linq .使用系统。文字;使用系统。线程化。任务;命名空间杰克旺卡姆特.WinForm {///summary////生成折叠的类,它实现ICSharpCode .为我们的文档生成文件夹。////摘要///参数名=“文档”当前文档/param ///param name='fileName '文档的文件名/param///param name=“解析信息”额外的分析信息,此示例中未使用/param///返回文件夹标记列表。/返回公共列表文件夹标记生成文件夹标记(I文档文档,字符串文件名,对象解析信息){ ListFoldMarker list=new ListFoldMarker();//堆栈先进先出var startLines=new stack int();//为整个文档创建文件夹标记,枚举每一行for(int I=0;我记录totalnumberoflinei){//获取当前行的文本。字符串文本=文档GetText(文档GetLineSegment(I));如果(文本。修剪()。以(' # region ')//开头查找方法开始{ startline } .推(我);}如果(文本。修剪()。开始开关(' #结束区域')//查找方法结尾{ int start=startLines .pop();//向列表中添加新的文件夹标记//文档=当前文档//start=FoldMarker//文档的开始行GetLineSegment(开始)。长度=当前行的结尾=我们的文件夹标记的开始列//i=当前行=文件夹标记的结束行。//7=结束列列表。添加新的文件夹标记(文档、开始、文档GetLineSegment(开始)。长度,我,57岁,FoldType .区域,".'));} //支持嵌套{}如果(文本。修剪()。开始于(' {')) //查找方法开始于{开始线.推(我);}如果(文本。修剪()。以(' } '开头)//查找方法结尾{ if(startline).计数0) { int start=startLines .pop();名单。添加新的文件夹标记(文档、开始、文档GetLineSegment(开始)。长度,我,57岁,FoldType .类型体'.}'));} } /////摘要如果(文本。修剪()。以('///summary ')//开头查找方法开始{开始行.推(我);}如果(文本。修剪()。开始开关('///返回')//查找方法结尾{ int start=startLines .pop();//获取注释文本(包括空格)字符串显示=文档GetText(文档GetLineSegment(开始1)。偏移,文件GetLineSegment(开始1)。长度);//移除////显示=显示。修剪()。修剪开始('/');名单。添加新的文件夹标记(文档、开始、文档GetLineSegment(开始)。长度,我,57岁,FoldType .TypeBody,显示));} }返回列表;} }}三、高亮配置
拷贝CSharp-Mode.xshd为JackCSharp-Mode.xshd,将其中的名字修改为:语法定义名称=' JackC # ',并添加高亮关键字,如下:
这样代码中出现的杰克旺就会高亮。下面的代码片段将自定义高亮文件进行加载,并用设置突出显示进行设置,这里一定注意目录下必须有xshd的配置文件,否则高亮将失效。
文本编辑器。编码=系统文字。编码。UTF8文本编辑器字体=新字体(《黑客》,12);文本编辑器文件。文件夹管理器。folding strategy=new JackWangCUMT .WinForm。MingFolding();文本编辑器文本=样本代码//自定义代码高亮字符串路径=应用程序. StartupPath ' highlingfilecontractxmodepider fsmp如果(目录。存在(路径)){ fsmp=新的文件同步模式提供程序(路径);高亮管理器经理。AddSyntaxModeFileProvider(fsmp);文本编辑器SetHighlighting(' JackC # ');}为了保持代码适时进行折叠,这里监听文本变化,如下所示:
私有void TextEditor _ TextChanged(对象发送者,EventArgs e) { //更新,以便进行代码折叠文本编辑器文件。文件夹管理器。updatefoldings(null,null);}最后说明的是,我们可以定义一个格式化代码的类,来格式化C#代码:
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。