博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ScintillaNET v2.5 简单应用实例讲解
阅读量:7065 次
发布时间:2019-06-28

本文共 4124 字,大约阅读时间需要 13 分钟。

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学习,还有好多功能不是很明白,大家可以去挖掘。

            

 

转载于:https://www.cnblogs.com/stiny2008/archive/2012/06/09/2543534.html

你可能感兴趣的文章
java android 将小数度数转换为度分秒格式
查看>>
一张图知道HTML5布局(图)
查看>>
LINQ To SQL在N层应用程序中的CUD操作、批量删除、批量更新
查看>>
谈谈javascript语法里一些难点问题(一)
查看>>
【BZOJ】1082: [SCOI2005]栅栏(二分+dfs)
查看>>
通过递归组合多维数组!
查看>>
ocp 1Z0-051 23-70题解析
查看>>
关于MFLAGS与MAKEFLAGS
查看>>
NotePad++ for PHP
查看>>
ssh事务回滚,纪念这几个月困扰已久的心酸
查看>>
jQuery中的编程范式
查看>>
比较快速排序,冒泡排序,双向冒泡排序的执行效率
查看>>
还没被玩坏的robobrowser(5)——Beautiful Soup的过滤器
查看>>
Linux 精准获取进程pid--转
查看>>
Servlet、Filter、Listener总结
查看>>
[翻译] JTBorderDotAnimation
查看>>
关于Thread类中三个interrupt方法的研究与学习(转)
查看>>
mysql 加入列,改动列,删除列。
查看>>
UML的学习
查看>>
x265探索与研究(六):main()函数
查看>>