编写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;
}
分享到:
相关推荐
本文将深入探讨RichTextBox控件的语法高亮功能及其源代码实现。 首先,理解什么是语法高亮。语法高亮是一种在代码编辑器中提升代码可读性的技术,通过为不同类型的编程元素(如关键字、字符串、注释等)赋予不同的...
如何最简单在C#中,richTextBox,控件,中放入图片 如何最简单在C#中,richTextBox,控件,中放入图片 如何最简单在C#中,richTextBox,控件,中放入图片 如何最简单在C#中,richTextBox,控件,中放入图片 如何最...
本文将详细讲解如何在C#的WinForms环境中,利用RichTextBox控件实现关键字高亮显示。 首先,我们需要了解`RichTextBox`的基本操作。`RichTextBox`控件提供了丰富的文本格式化功能,包括字体、颜色、样式等设置。在...
在C#编程中,`RichTextBox`控件通常用于显示和编辑富文本,它支持RTF(Rich Text Format)格式,允许我们展示复杂的文本样式,包括字体、颜色、大小、对齐方式等。当我们需要在应用程序中生成或显示表格时,`...
在.NET Framework中,`RichTextBox`控件是一个用于显示和编辑多格式文本的常用组件,广泛应用于各种桌面应用。然而,原生的`RichTextBox`控件功能相对有限,不支持一些高级特性,如插入图片等。为了满足更丰富的功能...
在C#编程中,`RichTextBox`控件是Windows Forms应用程序中常见的文本编辑组件,用于显示和编辑富文本格式的数据。它提供了丰富的文本格式化功能,如字体样式、颜色、大小以及对齐方式等。然而,`RichTextBox`默认并...
`C#161演示将图片和文字混合显示在RichTextBox控件中`的源代码为我们提供了一个很好的学习案例,教我们如何利用RTF格式和Base64编码在`RichTextBox`中实现图文混排,这对于开发具有更丰富用户体验的应用程序非常有用...
这是一个利用RichTextBox控件进行VB语法高亮显示的类,其原作者是progame。 原始代码支持多种语言的处理,本人根据自己的需要进行了修改,只对VB进行处理,增加了许多VB关键字,还增加一个CStringBuilder.cls 类,...
同时,`RichTextBox`控件是Windows Forms应用程序中用于显示和编辑富文本内容的重要工具。本文将深入探讨如何使用C#操作文本文件,并结合`RichTextBox`控件进行交互。 首先,让我们了解如何在C#中读取和写入文本...
在VB(Visual Basic)编程环境中,我们可以利用RichTextBox控件来实现代码的语法高亮显示。这个实例将向你展示如何使代码在 RichTextBox 中变得更为美观和易于阅读,类似于专业代码编辑器的功能。理解并掌握这个技术...
【C#版本】语法高亮显示分析程序是一个用于解析、理解和突出显示源代码文本中特定语言语法的软件工具。在编程环境中,语法高亮能够帮助开发者更清晰地识别代码结构,提升阅读和编辑代码的效率。C#版本的实现通常会...
C#是微软开发的一种面向对象的编程语言,广泛应用于Windows桌面应用、Web应用以及游戏开发等。RichTextBox是.NET Framework中的一个控件,它提供了富文本编辑能力,支持字体样式、颜色、超链接等。 要实现Word域...
在C#编程中,`RichTextBox`控件通常用于创建富文本编辑器,它支持诸如字体样式、颜色、超链接等格式化文本。然而,`RichTextBox`默认并不支持显示图像,更不用说动态GIF了。为了在`RichTextBox`中实现动态GIF显示,...
在实际项目中,创建这样的自定义控件不仅可以满足行号显示的需求,还可以为`RichTextBox`提供其他自定义功能,如代码高亮、搜索替换等。通过封装这些功能,我们的代码会更加模块化,易于维护和扩展。 `WindowsForms...
在.NET框架中,C#是一种常用的编程语言,用于开发各种应用程序。在开发桌面应用时,我们经常使用Windows Forms或WPF来构建用户界面。在这些界面中,`RichTextBox`控件是一个非常实用的组件,它允许用户输入和格式化...
在C#编程中,开发一个类似...通过以上步骤,我们可以构建一个功能完备且用户友好的C#代码编辑器,实现类似博客园的代码插入和高亮功能。在实际开发过程中,还需要根据具体需求进行定制和优化,以满足各种场景下的使用。
实现这些功能可能需要额外的库,如`SyntaxHighlighter`或自定义解析器来识别代码结构,然后应用相应的样式。对于智能提示,可以创建一个下拉列表或使用`AutoCompleteSource`属性结合数据源来提供自动完成建议。 在...
在C#编程中,`richtextbox`控件是一个非常常用的文字编辑和显示组件,它支持多种格式化文本,如字体、颜色、样式等。在实际应用中,我们经常需要为用户提供查找(Find)和替换(Replace)的功能,以便他们能快速定位...
老外写的一个控件 ,比RichTextBox功能多 ,最大的亮点就是:支持语法高亮。
在.NET框架中,C#是一种常用的编程语言,用于开发各种应用程序,包括Windows桌面应用。`RichTextBox`控件是Windows Forms中的一个组件,用于显示和编辑富文本内容,支持多种格式,如字体、颜色、段落等。在某些场景...