最近由于项目需要,需用 c# 写一个简易 python 代码编缉器,嵌入在 winform 程序中。需实现以下几个基本功能:
- 行号显示;
- 撤销重做;
- 代码高亮;
- 代码缩进;
- 代码折叠;
- 代码提示、补全,即 Intellisense 功能。
找了一圈,找到一个第三放开源控件 Scintilla ,可以满足需求,但此控件是 c++。幸运的是,有大神写了 c# 版本 ScintillaNet ,是对 SciLexer 进行的包装(wrapper)。因此,可基于 ScintillaNet 进行二次开发,记录如下。
1、行号显示
设置 scintilla 的 Margions 区域:
scintilla.Margins[0].Width = 16;
2、撤销重做
scintilla 已有自带,可调用其 Redo、Undo 方法。
3、代码高亮
已有相应语言的 Recipe ,如 python 的设置。
4、代码缩进
5、代码折叠
6、Intellisense 功能
在 CharAdded 事件里判断,调用 AutoCShow 来显示提醒功能。但这只是最基本的提醒功能。要做的完整些,比较复杂,需能提前获取到所需提醒的所有信息,同时需考虑性能问题。正在研究中。
更多使用方法,请参考官方 wiki。
网友评论