狐表集成代码高亮框ICSharpCode.TextEditor(虽然它自称代码编辑器),支持编辑,支持VB、SQL、JSON、XML等18种语法高亮,可自定义语法颜色和护眼绿背景色

发表日期: 2022-05-27

1简介
1.1功能说明

ICSharpCode.TextEditor原生是个代码编辑器,但是非常雏形,还需要做大量的xml编写工作。那我就没改动了,只是集成进来做代码高亮,代替之前Highlight.js只能高亮不能编辑的缺陷。

与狐表最新版编辑器对比,不支持代码折叠、代码重排、自动语法提示、自动列名提示等等。没错,就是狐表最好用的功能,它都没有!(但是如果你有能力,你可以在Github里下载源码进行强力的二次开发,把那些功能自己编码实现,这个工具提供好底层框架),那它有啥用?

还是有点用的,它能集成进狐表窗体,能编译发布后使用,能高亮查看与编辑vb、sql、json、xml、Html、Js、Css等,当做是个轻量级的代码编辑框。因为有的人,sql和json配置文件都是编译发布后,外置在Txt或者内置TextBox里修改(尤其是折腾视图的用户),看黑白不是很爽,想优化下的。

主要功能如下:
1. 代码高亮
2. 代码高亮规则自定义
3. 默认支持17种 ASP/XHTML、BAT、Boo、Coco、CSS、C++.NET、C#、HTML、Java、JavaScript、JSON、Lua、Patch、PHP、SQL、TeX、VBNET、XML语法规则
4. 代码编辑器背景色可以自定义
5. 可以嵌入狐表窗体里使用
6. 支持常见的快速复制整行、缩进整行、换行缩进、括号高亮(这点就比TextBox强多啦,编辑器怎么没一些快捷键呢?)
7. 字体设置
8. 自动双击选中词语

按此在新窗口浏览图片

按此在新窗口浏览图片

按此在新窗口浏览图片

按此在新窗口浏览图片

1.2Github地址
github地址:https://github.com/netsparker/ICSharpCode.TextEditor ,这个人在原生基础上,修复了滚动条不隐藏的问题。

2安装
2.1 狐表添加外部引用
dll下载地址(在文章结尾有)
按此在新窗口浏览图片


2.1 放好自定义亮语法文件
刚才的压缩包解压后,还有一个文件夹,按照这样路径存放
按此在新窗口浏览图片


2.2添加全局代码
按此在新窗口浏览图片
Public Sub IC_TextChanged(ByVal sender As ICSharpCode.TextEditor.TextEditorControl, ByVal e As System.EventArgs)
    '把对象传递到自定义内部函数维护,这样改功能,就不需要重启项目
    Functions.Execute("Handle_IC_TextChanged", sender)
End Sub

2.3添加自定义内部函数
函数名:Handle_IC_TextChanged
'当代码编辑器TextChanged后触发,可以通过Name来判断是哪个代码编辑器的事件
Dim e As ICSharpCode.TextEditor.TextEditorControl = Args(0)
'MessageBox.Show(e.Name & "监听到变化:" & e.Text )
3使用说明
3.1窗口初始化
添加一个Panel面板,待会我们用它做容器,把代码编辑器填充进去

按此在新窗口浏览图片

窗口的AfterLoad事件:
Dim ct As New ICSharpCode.TextEditor.TextEditorControl
ct.Dock = System.Windows.Forms.DockStyle.Fill '填充整个Panel
ct.Name = "TextEditor" '控件名称
ct.Font = New Font("宋体", 10) '字体设置
ct.Encoding = System.Text.Encoding.Default '使用系统默认编码方式
AddHandler ct.TextChanged , AddressOf IC_TextChanged '添加TextChanged变化的事件监听
ct.ShowEOLMarkers = False '显示换行光标,推荐false
ct.ShowHRuler = True '显示上标尺,推荐true
ct.ShowInvalidLines = False '显示无用空行的标志,推荐false
ct.ShowMatchingBracket = True '显示匹配括号
ct.ShowSpaces = False '显示空格符
ct.ShowTabs = True '显示缩进符
ct.ShowVRuler = False '显示垂直虚拟尺子
ct.ShowHRuler = False '显示水平虚拟尺子
ct.AllowCaretBeyondEOL = False '是否允许直接在空白处开始编辑
ct.ConvertTabsToSpaces = True '用空格符替换tab效果
ct.SetHighlighting("VBNET") '设置当前高亮语法规则
'有这些规则:ASP/XHTML,BAT,Boo,Coco,CSS,C++.NET,C#,HTML,Java,JavaScript,JSON,Patch,PHP,SQL,TeX,VBNET,XML
Dim pan As WinForm.Panel = e.Form.Controls("Panel1")
pan.BaseControl.Controls.Add(ct)
窗口BeforeClose事件:
Dim ct As ICSharpCode.TextEditor.TextEditorControl = e.Form.Controls("Panel1").BaseControl.controls("TextEditor")
ct.Dispose '释放内存
3.2写入代码
Dim ct As ICSharpCode.TextEditor.TextEditorControl = e.Form.Controls("Panel1").BaseControl.controls("TextEditor")
Dim Code As String
Code = "Dim Val1 As Integer = 1" & vbcrlf
Code = Code & "Dim Val2 As Integer = 2" & vbcrlf
Code = Code & "Dim Sum As Integer = Val1 + Val2" & vbcrlf
Code = Code & "Return Sum"
ct.Text = Code
ct.Refresh '刷新一下,有时候会渲染延迟

按此在新窗口浏览图片

3.3读取代码
Dim ct As ICSharpCode.TextEditor.TextEditorControl = e.Form.Controls("Panel1").BaseControl.controls("TextEditor")
MessageBox.Show(ct.Text)

按此在新窗口浏览图片


3.4应用自定义高亮语法
高亮语法文件(用VBNET做案例程序根目录\Attachments\Syntax\VBNET-Mode.xshd
按此在新窗口浏览图片

按此在新窗口浏览图片

在窗口放个combobox
按此在新窗口浏览图片

应用语法的按钮代码:
Dim synDir As String = ProjectPath & "Attachments\Syntax"
Dim ct As ICSharpCode.TextEditor.TextEditorControl = e.Form.Controls("Panel1").BaseControl.controls("TextEditor")
Dim cb1 As WinForm.ComboBox = e.Form.Controls("ComboBox_语法颜色")
If cb1.Text <> "" Then
    If FileSys.DirectoryExists(synDir) Then
        Dim fsmProvider = New ICSharpCode.TextEditor.Document.FileSyntaxModeProvider(synDir)
        ICSharpCode.TextEditor.Document.HighlightingManager.Manager.AddSyntaxModeFileProvider(fsmProvider)
        ct.SetHighlighting(cb1.Text)
    Else
        MessageBox.Show(synDir & "不存在")
    End If
Else
    MessageBox.Show("请先选择语法")
End If
这样你每次改了语法文件,直接点这个应用按钮,就立刻生效了

3.5通过Leave获取代码结果
由于我们嵌入在Panel面板,所以可以监听Leave事件,当鼠标点击其他地方后,就立刻获取内容
按此在新窗口浏览图片

Leave事件:
Dim ct As ICSharpCode.TextEditor.TextEditorControl = e.Form.Controls("Panel1").BaseControl.controls("TextEditor")
MessageBox.Show(ct.Text)
3.6通过TextChanged监听代码变化
      在安装代码里,已经把Textchanged事件绑定到全局事件IC_TextChanged里,并且把变化对象也传递到内部函数Handle_IC_TextChanged,所以我们只需要在内部函数维护触发的事情即可。
      如果有多个代码编辑器,可以设置不同的Name,然后在内部函数里判断,再做相应处理
按此在新窗口浏览图片

按此在新窗口浏览图片

4其他常见的代码高亮效果
4.1 SQL高亮
按此在新窗口浏览图片

4.2 Json高亮
按此在新窗口浏览图片

4.3 XML高亮
按此在新窗口浏览图片

4.4 Html高亮
按此在新窗口浏览图片

4.5 JavaScript高亮
按此在新窗口浏览图片

4.6 Css高亮
按此在新窗口浏览图片

4.7 Bat高亮
按此在新窗口浏览图片


5报错异常说明
5.1 不正确的\r换行符

有的人代码会报以下错误,一般是在做了字符串截取后

image.png

解决方法:代码处理的结尾增加.TrimEnd(chr(13),例如

If s.EndsWith("e.Handled = True") = True Then
     s = s.SubString(0, s.Length - 17).TrimEnd(chr(13)) '要同时去掉回车符/r,不然会多了个奇怪换行让IC编辑器报错
End If

6完整案例下载

需要Foxtable≥20210529版本

链接:https://pan.baidu.com/s/1bKKYZ1X0AIv0JOra5Uumbw?pwd=m51q

提取码:m51q


随便看看

Copyright © 2016-2022 江门蓬江区华越科技公司 版权所有 | 承接软件定制开发,欢迎联系
粤ICP备17073215号