关于 syncfusion-winforms-syntax-editor
为使用 Syncfusion Windows Forms 的开发者提供 EditControl 实现指南,涵盖代码编辑、语法着色和 IntelliSense 等能力。
主要功能
- 01多语言语法着色与 XML 配置
- 02IntelliSense 自动完成与自动更正
- 03代码折叠、行号与书签
- 04查找替换及文件导入导出
- 05撤销重做与矩形选区
适用场景
- 01构建多语言源代码编辑器
- 02制作 SQL 或脚本编辑器
- 03开发配置文件编辑器
- 04创建带语法着色的日志查看器
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ syncfusion/ winforms-ui-components-skills --skill syncfusion-winforms-syntax-editor安装后在 Claude Code 中输入/syncfusion-winforms-syntax-editor确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/advanced-features.mdediting-features.mdfile-operations.mdgetting-started.mdintellisense.mdsyntax-highlighting.mdtext-visualization.md详细介绍
实现语法编辑器(EditControl)
本技能介绍如何实现 Syncfusion 的 EditControl。这是一款功能强大的文本编辑控件,可用于创建交互式代码编辑器应用,提供类似 Visual Studio 的功能,包括语法高亮、IntelliSense、代码大纲和全面的编辑能力。
何时使用此技能
在以下场景中使用此技能:
- 创建支持热门语言语法高亮的代码编辑器应用
- 构建具备类似 Visual Studio 编辑功能的文本编辑器
- 实现支持 IntelliSense 的语法感知代码编辑
- 为文本编辑器添加代码大纲和折叠功能
- 为特定语法高亮创建自定义语言配置
- 构建支持多种编程语言的源代码查看器或编辑器
- 实现包含剪贴板操作和撤销/重做功能的高级文本编辑
- 为文本编辑应用添加查找和替换对话框
- 创建可同时查看多个部分的分屏代码编辑器
- 导出或打印并保留语法高亮的代码
- 在文本编辑器中实现自动补全和自动更正
- 构建需要行号、书签和代码导航功能的应用
- 创建支持类似 Visual Studio 矩形块选择功能的文本编辑器
组件概览
控件: EditControl
命名空间: Syncfusion.Windows.Forms.Edit
所需程序集:
Syncfusion.Edit.Windows.dll(主要程序集)Syncfusion.Tools.Windows.dllSyncfusion.Shared.Base.dll
主要功能
EditControl 提供全面的代码编辑功能:
- 语法高亮: 内置支持 11 种语言(C#、VB.NET、XML、HTML、Java、SQL、PowerShell、JavaScript、VBScript、Delphi、C),还可通过 XML 自定义语言配置
- 编辑功能: 剪贴板操作、无限撤销/重做、拖放、普通选择和矩形块选择、通过行修改标记跟踪更改
- IntelliSense: 使用预定义数据自动完成、自动更正常见拼写错误、为折叠的代码块显示上下文工具提示、自定义 IntelliSense 弹出窗口
- 代码大纲: 使用可配置的大纲区域展开/折叠代码块、括号匹配、可折叠分区
- 文本可视化: 行号、自动换行、当前行高亮、内容分隔线、下划线样式(实线/虚线/波浪线/点线)、书签和自定义指示器
- 导航: 提供丰富的 API,支持按字符、单词、行、页和文档级别导航
- 查找和替换: 内置对话框,提供类似 Visual Studio 的查找和替换功能
- 文件操作: 创建、打开和保存文件(支持编码),导出为 XML/RTF/HTML,以及按格式打印
- 高级功能: 分屏查看文档的多个部分;状态栏跟踪行、列和插入符号位置;支持类似 TextBox 的单行模式;可自定义快捷键
- 全球化: 全面的本地化支持,支持 RTL(从右到左)文本布局
- 事件: 提供全面的事件模型,用于处理文档更改、选择、导航和用户交互
文档与导航指南
入门
📄 阅读: references/getting-started.md
适用于以下场景:
- 安装并引用 EditControl 程序集
- 通过设计器或代码创建 EditControl
- 配置基本属性(大小、边框、停靠)
- 将初始内容载入编辑器
- 设置基本的代码编辑器应用
语法高亮
📄 阅读: references/syntax-highlighting.md
适用于以下场景:
- 应用 C#、VB.NET、XML、HTML、Java、SQL、PowerShell、JavaScript 等语言的内置语法高亮
- 使用
ApplyConfiguration()和KnownLanguages枚举 - 使用 XML 创建自定义语言配置
- 定义词素、格式和代码着色规则
- 配置特定于语言的语法元素
- 在一个应用中处理多种语言类型
编辑功能
📄 阅读: references/editing-features.md
需要执行以下操作时:
- 实现剪贴板操作(剪切、复制、粘贴)
- 配置无限撤销/重做功能
- 启用普通或矩形块选择模式
- 支持拖放文本编辑
- 添加块缩进和取消缩进功能
- 显示行修改标记以跟踪更改
- 自定义用于编辑操作的上下文菜单
IntelliSense 功能
📄 阅读: references/intellisense.md
需要执行以下操作时:
- 使用预定义数据源配置自动完成
- 启用对常见错字和拼写错误的自动更正
- 为折叠的代码显示上下文工具提示
- 创建自定义 IntelliSense 弹出窗口
- 处理 IntelliSense 事件和用户交互
- 自定义 IntelliSense 项目的外观和行为
文本可视化
📄 阅读: references/text-visualization.md
需要执行以下操作时:
- 自定义显示行号
- 启用代码大纲和折叠
- 配置自动换行行为
- 使用自定义颜色突出显示当前行
- 在各个部分之间添加内容分隔线
- 应用下划线样式(实线、虚线、波浪线、点线)
- 创建书签和自定义指示标记
- 在书签之间导航
文件操作与导出
📄 阅读: references/file-operations.md
需要执行以下操作时:
- 以编程方式创建新文档
- 使用
LoadFile()打开和加载文件 - 使用
Save()和SaveAs()保存文档 - 处理文件编码(UTF-8、Unicode、ASCII)
- 将内容导出为 XML、RTF 或 HTML 格式
- 打印带语法高亮的文档
- 配置打印设置和页面设置
高级功能
📄 阅读: references/advanced-features.md
需要执行以下操作时:
- 创建拆分视图,以查看文档的多个部分
- 配置和自定义状态栏
- 使用单行模式实现类似 TextBox 的行为
- 实现查找和替换对话框
- 以编程方式使用文本导航方法
- 自定义快捷键绑定
- 启用 RTL(从右向左)支持
- 将编辑器本地化为不同语言
- 处理全面的事件模型
- 优化大文件的滚动行为
快速入门示例
带 C# 语法高亮的基本代码编辑器
C#:
using Syncfusion.Windows.Forms.Edit;
using Syncfusion.Windows.Forms.Edit.Enums;
using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
public class CodeEditorForm : Form
{
private EditControl editControl1;
public CodeEditorForm()
{
InitializeComponent();
SetupCodeEditor();
}
private void SetupCodeEditor()
{
// Create EditControl
editControl1 = new EditControl();
// Basic configuration
editControl1.Dock = DockStyle.Fill;
editControl1.BorderStyle = BorderStyle.Fixed3D;
// Apply C# syntax highlighting
editControl1.ApplyConfiguration(KnownLanguages.CSharp);
// Enable line numbers
editControl1.ShowLineNumbers = true;
// Enable code outlining
editControl1.ShowOutliningCollapsers = true;
// Add to form
this.Controls.Add(editControl1);
// Load sample code (optional)
string sampleCode = @"using System;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(""Hello, World!"");
}
}
}";
editControl1.Text = sampleCode;
}
private void InitializeComponent()
{
this.Text = "C# Code Editor";
this.Size = new Size(800, 600);
}
}
VB.NET:
Imports Syncfusion.Windows.Forms.Edit
Imports Syncfusion.Windows.Forms.Edit.Enums
Imports System
Imports System.Drawing
Imports System.IO
Imports System.Windows.Forms
Public Class CodeEditorForm
Inherits Form
Private editControl1 As EditControl
Public Sub New()
InitializeComponent()
SetupCodeEditor()
End Sub
Private Sub SetupCodeEditor()
' Create EditControl
editControl1 = New EditControl()
' Basic configuration
editControl1.Dock = DockStyle.Fill
editControl1.BorderStyle = BorderStyle.Fixed3D
' Apply C# syntax highlighting
editControl1.ApplyConfiguration(KnownLanguages.CSharp)
' Enable line numbers
editControl1.ShowLineNumbers = True
' Enable code outlining
editControl1.ShowOutliningCollapsers = True
' Add to form
Me.Controls.Add(editControl1)
' Load sample code (optional)
Dim sampleCode As String = "using System;" & vbCrLf & vbCrLf & _
"namespace HelloWorld" & vbCrLf & _
"{" & vbCrLf & _
" class Program" & vbCrLf & _
" {" & vbCrLf & _
" static void Main(string[] args)" & vbCrLf & _
" {" & vbCrLf & _
" Console.WriteLine(""Hello, World!"");" & vbCrLf & _
" }" & vbCrLf & _
" }" & vbCrLf & _
"}"
editControl1.Text = sampleCode
End Sub
Private Sub InitializeComponent()
Me.Text = "C# Code Editor"
Me.Size = New Size(800, 600)
End Sub
End Class
常见模式
模式 1:多语言代码编辑器
创建一个可在不同编程语言之间切换的编辑器:
C#:
private ComboBox languageSelector;
private EditControl editControl1;
private void SetupMultiLanguageEditor()
{
// Language selector
languageSelector = new ComboBox
{
Dock = DockStyle.Top,
DropDownStyle = ComboBoxStyle.DropDownList
};
languageSelector.Items.AddRange(new object[]
{
"C#", "VB.NET", "XML", "HTML", "Java", "SQL", "PowerShell", "JavaScript"
});
languageSelector.SelectedIndex = 0;
languageSelector.SelectedIndexChanged += LanguageSelector_SelectedIndexChanged;
// Editor
editControl1 = new EditControl
{
Dock = DockStyle.Fill,
ShowLineNumbers = true,
ShowOutliningCollapsers = true
};
this.Controls.Add(editControl1);
this.Controls.Add(languageSelector);
// Apply initial language
ApplyLanguage("C#");
}
private void LanguageSelector_SelectedIndexChanged(object sender, EventArgs e)
{
ApplyLanguage(languageSelector.SelectedItem.ToString());
}
private void ApplyLanguage(string language)
{
switch (language)
{
case "C#":
editControl1.ApplyConfiguration(KnownLanguages.CSharp);
break;
case "VB.NET":
editControl1.ApplyConfiguration(KnownLanguages.VB);
break;
case "XML":
editControl1.ApplyConfiguration(KnownLanguages.XML);
break;
case "HTML":
editControl1.ApplyConfiguration(KnownLanguages.HTML);
break;
case "Java":
editControl1.ApplyConfiguration(KnownLanguages.Java);
break;
case "SQL":
editControl1.ApplyConfiguration(KnownLanguages.SQL);
break;
case "PowerShell":
editControl1.ApplyConfiguration(KnownLanguages.PowerShell);
break;
case "JavaScript":
editControl1.ApplyConfiguration(KnownLanguages.JScript);
break;
}
}
模式 2:带保存/加载功能的文件编辑器
创建一个支持文件操作的编辑器:
C#:
private EditControl editControl1;
private string currentFilePath = null;
private void SetupFileEditor()
{
editControl1 = new EditControl
{
Dock = DockStyle.Fill,
ShowLineNumbers = true
};
// Menu bar
MenuStrip menuStrip = new MenuStrip();
ToolStripMenuItem fileMenu = new ToolStripMenuItem("File");
fileMenu.DropDownItems.Add("New", null, NewFile_Click);
fileMenu.DropDownItems.Add("Open...", null, OpenFile_Click);
fileMenu.DropDownItems.Add("Save", null, SaveFile_Click);
fileMenu.DropDownItems.Add("Save As...", null, SaveFileAs_Click);
menuStrip.Items.Add(fileMenu);
this.Controls.Add(editControl1);
this.Controls.Add(menuStrip);
this.MainMenuStrip = menuStrip;
}
private void NewFile_Click(object sender, EventArgs e)
{
editControl1.Text = string.Empty;
currentFilePath = null;
this.Text = "Untitled - Code Editor";
}
private void OpenFile_Click(object sender, EventArgs e)
{
OpenFileDialog openDialog = new OpenFileDialog
{
Filter = "All Files (*.*)|*.*|C# Files (*.cs)|*.cs|VB Files (*.vb)|*.vb"
};
if (openDialog.ShowDialog() == DialogResult.OK)
{
editControl1.LoadFile(openDialog.FileName);
currentFilePath = openDialog.FileName;
this.Text = Path.GetFileName(currentFilePath) + " - Code Editor";
// Auto-detect language based on extension
string ext = Path.GetExtension(currentFilePath).ToLower();
if (ext == ".cs")
editControl1.ApplyConfiguration(KnownLanguages.CSharp);
else if (ext == ".vb")
editControl1.ApplyConfiguration(KnownLanguages.VB);
else if (ext == ".xml")
editControl1.ApplyConfiguration(KnownLanguages.XML);
}
}
private void SaveFile_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(currentFilePath))
{
SaveFileAs_Click(sender, e);
}
else
{
editControl1.SaveFile(currentFilePath);
}
}
private void SaveFileAs_Click(object sender, EventArgs e)
{
SaveFileDialog saveDialog = new SaveFileDialog
{
Filter = "All Files (*.*)|*.*|C# Files (*.cs)|*.cs|VB Files (*.vb)|*.vb"
};
if (saveDialog.ShowDialog() == DialogResult.OK)
{
editControl1.SaveFile(saveDialog.FileName);
currentFilePath = saveDialog.FileName;
this.Text = Path.GetFileName(currentFilePath) + " - Code Editor";
}
}
模式 3:带 IntelliSense 的代码编辑器
C#:
editControl1 = new EditControl { Dock = DockStyle.Fill, ShowLineNumbers = true };
editControl1.ApplyConfiguration(KnownLanguages.CSharp);
// Configure IntelliSense suggestions using ContextChoiceController
// Populate suggestions when the context choice opens so they are context-aware
editControl1.ContextChoiceOpen += (s, e) =>
{
var controller = editControl1.ContextChoiceController;
controller.Items.Clear();
controller.Items.Add("Console");
controller.Items.Add("Console.WriteLine");
controller.Items.Add("string");
controller.Items.Add("int");
controller.Items.Add("public");
controller.Items.Add("private");
controller.Items.Add("class");
};
// Configure simple auto-replace (auto-correct) triggers on the editor language
editControl1.Language.AutoReplaceTriggers.Add(new AutoReplaceTrigger("teh", "the"));
editControl1.Language.AutoReplaceTriggers.Add(new AutoReplaceTrigger("cosole", "console"));
editControl1.UseAutoreplaceTriggers = true;
this.Controls.Add(editControl1);
关键属性和方法
基本属性
| 属性 | 类型 | 描述 |
|---|---|---|
| Text | string | 获取或设置编辑器的文本内容 |
| ShowLineNumbers | bool | 在边距中显示或隐藏行号 |
| ShowOutliningCollapsers | bool | 启用代码大纲的折叠/展开控件 |
| WordWrap | bool | 启用或禁用自动换行 |
| ReadOnly | bool | 将编辑器设为只读 |
| TabSize | int | 设置制表符对应的空格数 |
| AutoCompleteMode | AutoCompleteMode | 配置自动完成行为(All、Suggest、None) |
| EnableAutoCorrect | bool | 启用对常见错字的自动更正 |
| StatusBarSettings | StatusBarSettings | 配置内置状态栏 |
| ContextChoiceOpen | bool | 获取 IntelliSense 上下文菜单是否已打开 |
| CanUndo | bool | 指示是否可以执行撤销操作 |
| CanRedo | bool | 指示是否可以执行重做操作 |
| IsModified | bool | 指示文档是否已修改 |
关键方法
| 方法 | 描述 |
|---|---|
| ApplyConfiguration(KnownLanguages) | 应用内置的语法高亮配置 |
| LoadFile(string) | 将文件加载到编辑器中 |
| Save() | 打开“保存”对话框(无参数) |
| SaveFile(string) | 将当前内容保存到指定路径 |
| SaveAs() | 打开“另存为”对话框 |
| Undo() | 执行撤销操作 |
| Redo() | 执行重做操作 |
| Cut() | 将选中的文本剪切到剪贴板 |
| Copy() | 将选中的文本复制到剪贴板 |
| Paste() | 从剪贴板粘贴文本 |
| SelectAll() | 选中编辑器中的所有文本 |
| ShowFindDialog() | 打开查找对话框 |
| ShowReplaceDialog() | 打开替换对话框 |
| GoTo(int) | 跳转到指定行号 |
| Text (property) | 获取或设置编辑器的文本内容 |
| SaveAsXML(string)、SaveAsHTML(string)、SaveAsRTF(string) | 将内容导出为 XML、HTML 或 RTF 格式 |
| Print() | 打开文档的打印对话框 |
常见用例
- 源代码编辑器:构建类似 Visual Studio 的代码编辑器,支持 C#、VB.NET、Java,并提供语法高亮和 IntelliSense
- 配置文件编辑器:用于 XML、JSON 文件的编辑器,支持语法验证
- SQL 查询编辑器:支持 SQL 语法高亮的数据库查询编辑器
- 脚本编辑器:用于自动化的 PowerShell、JavaScript 编辑器
- 代码片段管理器:存储和整理带语法高亮的代码片段
- 日志文件查看器:查看带语法高亮的结构化日志
- 多语言 IDE:构建支持多种语言并提供分屏视图的 IDE
后续步骤
从 入门指南 开始安装和配置 EditControl,然后根据应用需求,通过上方的导航指南探索具体功能。