最近由于項(xiàng)目需要,需用 c# 寫一個(gè)簡易 python 代碼編緝器,嵌入在 winform 程序中。需實(shí)現(xiàn)以下幾個(gè)基本功能:
- 行號顯示;
- 撤銷重做;
- 代碼高亮;
- 代碼縮進(jìn);
- 代碼折疊;
- 代碼提示、補(bǔ)全,即 Intellisense 功能。
找了一圈,找到一個(gè)第三放開源控件 Scintilla ,可以滿足需求,但此控件是 c++。幸運(yùn)的是,有大神寫了 c# 版本 ScintillaNet ,是對 SciLexer 進(jìn)行的包裝(wrapper)。因此,可基于 ScintillaNet 進(jìn)行二次開發(fā),記錄如下。
1、行號顯示
設(shè)置 scintilla 的 Margions 區(qū)域:
scintilla.Margins[0].Width = 16;
2、撤銷重做
scintilla 已有自帶,可調(diào)用其 Redo、Undo 方法。
3、代碼高亮
已有相應(yīng)語言的 Recipe ,如 python 的設(shè)置。
4、代碼縮進(jìn)
5、代碼折疊
6、Intellisense 功能
在 CharAdded 事件里判斷,調(diào)用 AutoCShow 來顯示提醒功能。但這只是最基本的提醒功能。要做的完整些,比較復(fù)雜,需能提前獲取到所需提醒的所有信息,同時(shí)需考慮性能問題。正在研究中。
更多使用方法,請參考官方 wiki。