以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [免费开源]cs端集成【语法高亮框】ICSharpCode.TextEditor(虽然它自称代码编辑器),支持编辑,支持VB、SQL、JSON、XML等17种代码高亮,可自定义语法颜色和护眼绿背景色  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=177632)

--  作者:chen37280600
--  发布时间:2022/5/29 10:07:00
--  [免费开源]cs端集成【语法高亮框】ICSharpCode.TextEditor(虽然它自称代码编辑器),支持编辑,支持VB、SQL、JSON、XML等17种代码高亮,可自定义语法颜色和护眼绿背景色

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


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编辑过]

--  作者:liufucan
--  发布时间:2022/5/29 10:21:00
--  
太牛
--  作者:playmal
--  发布时间:2022/5/29 17:22:00
--  
牛??????????????????????
--  作者:chen_sheng
--  发布时间:2022/5/30 0:22:00
--  
看看
--  作者:laipiwen
--  发布时间:2022/5/30 9:14:00
--  
杰哥厉害,谢谢分享
--  作者:linyunu1
--  发布时间:2022/5/30 15:56:00
--  
顶一个,真是太厉害了图片点击可在新窗口打开查看
--  作者:liutlk
--  发布时间:2022/5/31 11:10:00
--  
顶,真是厉害了!

--  作者:tongliaozyr
--  发布时间:2022/5/31 12:20:00
--  
不错,力挺!


--  作者:浙江仔
--  发布时间:2022/6/1 10:50:00
--  
杰哥出品,必属精品
--  作者:aix
--  发布时间:2022/6/1 12:36:00
--