编写Microsoft SQL Server数据库Table自动生成C#代码(C#代码生成器)及其页面代码aspx与aspx.cs过程中,试图实现C#代码的自动语法高亮着色;网上倒是不少可用于网页的javascript或css的资源;用于C# WinForm的不多,关键是不太适用,只好些一个;需要应用 Collections命名空间;需使用哈希表(Hashtable);
> 纯文本方式> 打印
using System.Collections;
using System.Collections.Generic;
Hashtable keywords = new Hashtable();
private void KeywordsInitialize()
{
keywords.Add("using", "1");
keywords.Add("public", "1");
keywords.Add("private", "1");
keywords.Add("namespace", "1");
keywords.Add("class", "1");
keywords.Add("set", "1");
keywords.Add("get", "1");
keywords.Add("void", "1");
keywords.Add("int", "1");
keywords.Add("string", "1");
keywords.Add("float", "1");
keywords.Add("double", "1");
keywords.Add("for", "1");
keywords.Add("foreach", "1");
keywords.Add("in", "1");
keywords.Add("object", "1");
keywords.Add("if", "1");
keywords.Add("else", "1");
keywords.Add("while", "1");
keywords.Add("do", "1");
keywords.Add("partial", "1");
keywords.Add("switch", "1");
keywords.Add("case", "1");
keywords.Add("default", "1");
keywords.Add("continue", "1");
keywords.Add("break", "1");
keywords.Add("return", "1");
keywords.Add("new", "1");
keywords.Add("bool", "1");
keywords.Add("null", "1");
keywords.Add("false", "1");
keywords.Add("true", "1");
keywords.Add("catch", "1");
keywords.Add("finally", "1");
keywords.Add("try", "1");
keywords.Add("enum", "1");
keywords.Add("extern", "1");
keywords.Add("inline", "1");
keywords.Add("char", "1");
keywords.Add("byte", "1");
keywords.Add("const", "1");
keywords.Add("long", "1");
keywords.Add("protected", "1");
keywords.Add("short", "1");
keywords.Add("signed", "1");
keywords.Add("unsigned", "1");
keywords.Add("struct", "1");
keywords.Add("static", "1");
keywords.Add("this", "1");
keywords.Add("throw", "1");
keywords.Add("union", "1");
keywords.Add("virtual", "1");
keywords.Add("abstract", "1");
keywords.Add("event", "1");
keywords.Add("as", "1");
keywords.Add("explicit", "1");
keywords.Add("base", "1");
keywords.Add("operator", "1");
keywords.Add("out", "1");
keywords.Add("params", "1");
keywords.Add("typeof", "1");
keywords.Add("uint", "1");
keywords.Add("ulong", "1");
keywords.Add("checked", "1");
keywords.Add("goto", "1");
keywords.Add("unchecked", "1");
keywords.Add("readonly", "1");
keywords.Add("unsafe", "1");
keywords.Add("implicit", "1");
keywords.Add("ref", "1");
keywords.Add("ushort", "1");
keywords.Add("decimal", "1");
keywords.Add("sbyte", "1");
keywords.Add("interface", "1");
keywords.Add("sealed", "1");
keywords.Add("volatile", "1");
keywords.Add("delegate", "1");
keywords.Add("internal", "1");
keywords.Add("is", "1");
keywords.Add("sizeof", "1");
keywords.Add("lock", "1");
keywords.Add("stackalloc", "1");
keywords.Add("var", "1");
keywords.Add("value", "1");
keywords.Add("yield", "1");
}
/// <summary>
/// C#语法高亮着色器
/// </summary>
/// <param name="start">起始行号</param>
private void RichHighlight(int start)
{
//richTextBox1.Text = textBox4.Text;
string[] ln = richTextBox1.Text.Split("\n");
int pos = 0;
int lnum = 0;
foreach (string lv in ln)
{
if (lnum >= start)
{
string ts = lv.Replace("(", " ").Replace(")", " ");
ts = ts.Replace("[", " ").Replace("]", " ");
ts = ts.Replace("{", " ").Replace("}", " ");
ts = ts.Replace(".", " ").Replace("=", " ").Replace(";", " ");
if (lv.Trim().StartsWith("//"))
{
richTextBox1.Select(pos, lv.Length);
richTextBox1.SelectionFont = new Font("宋体", 9, (FontStyle.Regular));
richTextBox1.SelectionColor = Color.Gray;
pos += lv.Length + 1;
continue;
}
if (lv.Trim().StartsWith("#"))
{
richTextBox1.Select(pos, lv.Length);
richTextBox1.SelectionFont = new Font("宋体", 9, (FontStyle.Regular));
richTextBox1.SelectionColor = Color.Green;
pos += lv.Length + 1;
continue;
}
ArrayList marks = new ArrayList();
string smark = "";
string last = "";
bool inmark = false;
for (int i = 0; i < ts.Length; i++)
{
if (ts.Substring(i, 1) == "\"" && last != "\\")
{
if (inmark)
{
marks.Add(smark + "," + i);
smark = "";
inmark = false;
}
else
{
smark += i;
inmark = true;
}
}
last = ts.Substring(i, 1);
}
if (inmark)
{
marks.Add(smark + "," + ts.Length);
}
string[] ta = ts.Split(" ");
int x = 0;
foreach (string tv in ta)
{
if (tv.Length < 2)
{
x += tv.Length + 1;
continue;
}
else
{
bool find = false;
foreach (string px in marks)
{
string[] pa = px.Split(",");
if (x >= Int32.Parse(pa[0]) && x < Int32.Parse(pa[1]))
{
find = true;
break;
}
}
if (!find)
{
if (keywords[tv] != null)
{
richTextBox1.Select(pos + x, tv.Length);
richTextBox1.SelectionFont = new Font("宋体", 9, (FontStyle.Regular));
richTextBox1.SelectionColor = Color.Blue;
}
}
x += tv.Length + 1;
}
}
foreach (string px in marks)
{
string[] pa = px.Split(",");
richTextBox1.Select(pos + Int32.Parse(pa[0]), Int32.Parse(pa[1]) - Int32.Parse(pa[0]) + 1);
richTextBox1.SelectionFont = new Font("宋体", 9, (FontStyle.Regular));
richTextBox1.SelectionColor = Color.DarkRed;
}
}
pos += lv.Length + 1;
lnum++;
}
// 设置一下,才能恢复;后续正确!
richTextBox1.Select(0, 1);
richTextBox1.SelectionFont = new Font("宋体", 9, (FontStyle.Regular));
richTextBox1.SelectionColor = Color.Black;
}
分享到:
相关推荐
在"RTB编辑器高亮"这个压缩包文件中,可能包含了一个简单的RichTextBox语法高亮编辑器的源代码实现。开发者可能已经实现了上述步骤,并封装成了易于使用的类库或控件,允许其他开发者方便地集成到自己的应用中。 这...
要实现C#关键字着色,我们可以利用.NET框架中的文本编辑控件,比如Visual Studio中的`RichTextBox`或者第三方库如`SyntaxEditor`。`SyntaxEditor`是一个强大的代码编辑控件,它提供了丰富的API来支持代码高亮显示。 ...
5. **语法高亮**:针对不同编程语言或文件类型,实现特定的语法着色规则。 6. **代码折叠**:允许用户隐藏和展开代码块,便于阅读和管理大量代码。 7. **自动完成**:当用户输入时,根据上下文提供代码补全建议,...
6. **语法高亮**:为了提高代码可读性,文本编辑器可以对特定语言(如C#、HTML、JavaScript等)的代码进行语法着色。这需要解析代码结构,识别关键字和符号,并用不同颜色展示。在C#中,可以使用`RichTextBox`控件...
- 代码编辑器:支持语法高亮、智能感知等功能,帮助编写代码。 - 调试工具:断点、步进调试、监视窗口等。 - 构建和发布工具:编译应用程序、创建安装包等。 **2. 窗体的简单应用** - **可视化编程相关基本概念...
语法高亮 Clipboarder使用自定义RichTextBox , SyntaxHighlightingTextBox突出显示文本。 用于着色的关键字存储在“ SHLs”目录中的XML文件中。 发行版 Clipboarder的最新版本是1.0.0。 发行说明和此发行版的二进制...