编写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语法高亮源代码 RichTextBox是TextBox的增强版本,可以实现基本的字符着色等功能,适用于一般的编辑器,例如写字板。
如何最简单在C#中,richTextBox,控件,中放入图片 如何最简单在C#中,richTextBox,控件,中放入图片 如何最简单在C#中,richTextBox,控件,中放入图片 如何最简单在C#中,richTextBox,控件,中放入图片 如何最...
C# 源码 扩展 RichTextBox 控件 加加入图片 文档 控件
C# 在richtextbox中生成表格 ,在richtextbox中画表格,共享给大家,不错的东东
C# RichTextbox设置行间距
这是一个利用RichTextBox控件进行VB语法高亮显示的类,其原作者是progame。 原始代码支持多种语言的处理,本人根据自己的需要进行了修改,只对VB进行处理,增加了许多VB关键字,还增加一个CStringBuilder.cls 类,...
C# 文本文件与RichTextBoxC# 文本文件与RichTextBoxC# 文本文件与RichTextBoxC# 文本文件与RichTextBoxC# 文本文件与RichTextBox
C#161演示将图片和文字混合显示在RichTextBox控件中 源代码
老外写的一个控件 ,比RichTextBox功能多 ,最大的亮点就是:支持语法高亮。
利用C#及RichTextBox简单实现Word域功能
详细讲解C#中richtextbox的使用方法!
c#实现的对xml高亮解析器,按照语法对关键字属性等进行高亮显示, 本程序是我从微软的网站上下载 下载的程序运行有点问题,经过了一些简单整理,现在可以运行 但注意本程序现在不支持对带用名称空间namespace的xml...
用richTextBox1.Find实现查找功能,C#源代码 用VisualStudio2008创建 http://download.csdn.net/user/gouyue
在网上看到关于如何操作richTextBox行代码,但是却看不到如何对某行文本进行独立操作的,比如设置背景颜色之类的,于是分享下自己的思路
c#记事c#记事本,richtextbox控件,实现与Windows记事本同样功能,学习之用。本,richtextbox控件,实现与Windows记事本同样功能,学习之用。
C#WinForm Ri用chTextBox做的 文本编辑器带有左中右等功能
本程序主要有以下功能: 1.在Richtextbox的旁边没有误差的显示动态行号。 2.可以使Richtextbox的滚动条跳到指定的行号处。...可以单击Richtextbox中的某行,然后通过鼠标事件获取鼠标所在的Richtextbox中的行的数据。
c# richtextbox 实现动态gif显示
N天前有人问怎么用RichTextBox做语法高亮; 这就需要用到语法分析; 还有很多论坛里也支持语法高亮的功能、代码折叠的功能; 这也算是一个常用的功能; 所以就随手搭建一个语法分析的框架; 思路是利用正则...
C# ,RichTextBox,使用方法 C# ,RichTextBox,使用方法 C# ,RichTextBox,使用方法 C# ,RichTextBox,使用方法 C# ,RichTextBox,使用方法 C# ,RichTextBox,使用方法 C# ,RichTextBox,使用方法