Foxtable(狐表)用户栏目专家坐堂 → [免费开源]cs端集成【语法高亮框】ICSharpCode.TextEditor(虽然它自称代码编辑器),支持编辑,支持VB、SQL、JSON、XML等17种代码高亮,可自定义语法颜色和护眼绿背景色


  共有20579人关注过本帖树形打印复制链接

主题:[免费开源]cs端集成【语法高亮框】ICSharpCode.TextEditor(虽然它自称代码编辑器),支持编辑,支持VB、SQL、JSON、XML等17种代码高亮,可自定义语法颜色和护眼绿背景色

帅哥哟,离线,有人找我吗?
chen37280600
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
[免费开源]cs端集成【语法高亮框】ICSharpCode.TextEditor(虽然它自称代码编辑器),支持编辑,支持VB、SQL、JSON、XML等17种代码高亮,可自定义语法颜色和护眼绿背景色  发帖心情 Post By:2022/5/29 10:07:00 [显示全部帖子]

(快速浏览杰哥分享过的所有经验汇总,点击跳转


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.png
按此在新窗口浏览图片



此主题相关图片如下:12.png
按此在新窗口浏览图片


此主题相关图片如下:2.png
按此在新窗口浏览图片


此主题相关图片如下:3.png
按此在新窗口浏览图片



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

2安装
2.1 狐表添加外部引用
dll下载地址(在文章结尾有)



此主题相关图片如下:2.png
按此在新窗口浏览图片


2.1 放好自定义亮语法文件
刚才的压缩包解压后,还有一个文件夹,按照这样路径存放


此主题相关图片如下:5.png
按此在新窗口浏览图片


2.2添加全局代码


此主题相关图片如下:6.png
按此在新窗口浏览图片


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面板,待会我们用它做容器,把代码编辑器填充进去


此主题相关图片如下:7.png
按此在新窗口浏览图片


窗口的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 '刷新一下,有时候会渲染延迟


此主题相关图片如下:8.png
按此在新窗口浏览图片


3.3读取代码

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


此主题相关图片如下:9.png
按此在新窗口浏览图片



3.4应用自定义高亮语法
高亮语法文件(用VBNET做案例程序根目录\Attachments\Syntax\VBNET-Mode.xshd


此主题相关图片如下:10.png
按此在新窗口浏览图片


此主题相关图片如下:11.png
按此在新窗口浏览图片


在窗口放个combobox

此主题相关图片如下:12.png
按此在新窗口浏览图片

应用语法的按钮代码:
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事件,当鼠标点击其他地方后,就立刻获取内容


此主题相关图片如下:13.png
按此在新窗口浏览图片


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,然后在内部函数里判断,再做相应处理


此主题相关图片如下:14.png
按此在新窗口浏览图片


此主题相关图片如下:15.png
按此在新窗口浏览图片


4其他常见的代码高亮效果
4.1 SQL高亮

此主题相关图片如下:16.png
按此在新窗口浏览图片

4.2 Json高亮

此主题相关图片如下:17.png
按此在新窗口浏览图片

4.3 XML高亮

此主题相关图片如下:18.png
按此在新窗口浏览图片

4.4 Html高亮

此主题相关图片如下:19.png
按此在新窗口浏览图片

4.5 JavaScript高亮

此主题相关图片如下:20.png
按此在新窗口浏览图片

4.6 Css高亮

此主题相关图片如下:21.png
按此在新窗口浏览图片

4.7 Bat高亮

此主题相关图片如下:22.png
按此在新窗口浏览图片

5完整案例下载
需要Foxtable≥20210529版本

以下内容只有回复后才可以浏览

=====================================================================
杰哥免费分享的web系统






===============================================================
顺便总结以前分享过的帖子,方便大家学习

联系QQ:2385350359


经验分享:





















[此贴子已经被作者于2024/6/5 18:04:48编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2022/6/7 18:57:00 [显示全部帖子]

2022.6.7更新:

之前分享的版本,是被人二次开发过,有bug,在Del和复制行会有问题,输入焦点会消失,要重新鼠标点,不好用

所以更新了一版,重新找回官方原生的,虽然没有了查找和替换功能,但是作为代码高亮和编辑来说,是完整无bug的,更加实用

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
回复:(playmal)你好,查找替换功能没有实现阿  发帖心情 Post By:2023/1/29 15:54:00 [显示全部帖子]

自己看源码修改实现,改不动也没办法,毕竟这是别人的东西

 回到顶部