ScintillaNET v2.5 简单应用实例讲解
摘要:在C#的使用过程中,总需要一些TextEdit控件的显示,像显示不同的编程语言特征,如关键字段颜色显示、行数、注释等。C++下有Scintilla控件的使用,c#下也有ScintillaNet。自己在使用过程中总结下,下文将简单讲解ScintillaNet的一些功能。
一、c#下的开源Text控件
C#下常用的TextEdit控件是ICSharpCode.TextEditor,它是SharpDevelop软件的一个控件,使用非常简单,但不支持.net4.0,否则会报内存读写错误,我初学,不知道解决方案。现在SharpDevelop使用的TextEdit控件是AvalonEdit,它在WPF下使用,不适合Winform程序使用。另一个开源的TextEdit控件就是ScintillaNet,开源,可以查看源代码,网站:http://scintillanet.codeplex.com/。里面附带一个DOME,通过Dome对ScintillaNet进行了解。
二、ScintillaNet实例图
修改过的ScintillaNet自带的Demo界面如下:
通过ScintillaNet可以非常简单实现编程语言设置,显示行号,复制粘贴等功能。
三、ScintillaNet的使用
通过添加引用ScintillaNET.dll,同时是工具栏中添加,直接拖入窗体使用。
this.scintilla.Dock = System.Windows.Forms.DockStyle.Fill; this.scintilla.LineWrapping.VisualFlags = ScintillaNET.LineWrappingVisualFlags.End; this.scintilla.Location = new System.Drawing.Point(0, 0); this.scintilla.Margins.Margin0.AutoToggleMarkerNumber = 0; this.scintilla.Margins.Margin0.Width = 20; this.scintilla.Margins.Margin1.AutoToggleMarkerNumber = 0; this.scintilla.Margins.Margin1.IsClickable = true; this.scintilla.Margins.Margin2.Width = 16;
四、常用的功能
Scintilla.Selection.SelectAll() | 全部选择 |
Scintilla.Printing.Print() | 打印 |
Scintilla.Printing.PrintPreview() | 打印预览 |
Scintilla.UndoRedo.Undo() | 撤销 |
Scintilla.UndoRedo.Redo() | 恢复 |
Scintilla.Clipboard.Copy() | 复制 |
Scintilla.Clipboard.Cut() | 剪切 |
Scintilla.Clipboard.Paste() | 粘贴 |
Scintilla.GoTo.ShowGoToDialog() | 定位 |
Scintilla.Markers.GetMarkerMask(currentLine) AddMarker | 插入标签 |
Scintilla.Lines.Current.FindPreviousMarker(1) | 上一个标签 |
Scintilla.Lines.Current.FindNextMarker(1) | 下一个标签 |
Scintilla.Markers.DeleteAll(0) | 清除标签 |
Scintilla.DropMarkers.Drop() | |
Scintilla.DropMarkers.Collect() | |
Scintilla.Commands.Execute(BindableCommand.UpperCase) | 装换大写 |
Scintilla.Commands.Execute(BindableCommand.LowerCase) | 装换小写 |
Scintilla.Commands.Execute(BindableCommand.LineComment) | 注释 |
Scintilla.Commands.Execute(BindableCommand.LineUncomment) | 取消注释 |
Scintilla.Snippets.ShowSnippetList() | |
Scintilla.Snippets.ShowSurroundWithList() | |
Scintilla.Margins.Margin0.Width | 行数宽度 |
Scintilla.Lines.Current.FoldExpanded | |
Scintilla.DocumentNavigation.NavigateBackward() | |
Scintilla.Whitespace.Mode | 空白 |
Scintilla.LineWrapping.Mode | Tab键 |
Scintilla.EndOfLine.IsVisible | 结束符 |
scintilla.ExportHtml | 导出为HTML |
五、打开文档
private DocumentForm OpenFile(string filePath) { DocumentForm doc = new DocumentForm(); SetScintillaToCurrentOptions(doc); doc.Scintilla.Text = File.ReadAllText(filePath); doc.Scintilla.UndoRedo.EmptyUndoBuffer(); doc.Scintilla.Modified = false; doc.Text = Path.GetFileName(filePath); doc.TabText = Path.GetFileName(filePath); doc.FilePath = filePath; doc.Show(dockPanel); toolIncremental.Searcher.Scintilla = doc.Scintilla; return doc; }
六、保存文档
public bool Save(string filePath) { using (FileStream fs = File.Create(filePath)) using (BinaryWriter bw = new BinaryWriter(fs)) bw.Write(scintilla.RawText, 0, scintilla.RawText.Length - 1); // Omit trailing NULL scintilla.Modified = false; //保存文件路径 Text = filePath; return true; }
七、导出为HTML
public bool ExportAsHtml() { using (SaveFileDialog dialog = new SaveFileDialog()) { string fileName = (Text.EndsWith(" *") ? Text.Substring(0, Text.Length - 2) : Text); dialog.Filter = "HTML Files (*.html;*.htm)|*.html;*.htm|All Files (*.*)|*.*"; dialog.FileName = fileName + ".html"; if (dialog.ShowDialog() == DialogResult.OK) { scintilla.Lexing.Colorize(); // Make sure the document is current using (StreamWriter sw = new StreamWriter(dialog.FileName)) scintilla.ExportHtml(sw, fileName, false); return true; } } return false; }
结束语:学习的不是很深入,需要的朋友可以进一步通过Demo学习,还有好多功能不是很明白,大家可以去挖掘。