小瓜zn

还是一步一步慢慢的爬吧

导航

ScintillaNET v2.5 简单应用实例讲解

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

             Demo下载

 

posted on 2012-06-09 21:37  小瓜zn  阅读(4373)  评论(0)    收藏  举报