【C#】【转】C#实现RichTextBox字符高亮

文档管理软件,文档管理系统,知识管理系统,档案管理系统的技术资料:
编写Microsoft SQL Server数据库Table自动生成C#代码(C#代码生成器)及其页面代码aspx与aspx.cs过程中,试图实现C#代码的自动语法高亮着色;网上倒是不少可用于网页的javascript或css的资源;用于C# WinForm的不多,关键是不太适用,只好些一个;需要应用 Collections命名空间;需使用哈希表(Hashtable);

[code]
csharp

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;
}

[/code] 
时间: 2024-10-05 15:39:39

【C#】【转】C#实现RichTextBox字符高亮的相关文章

浅析grep工具相关选项及正则表达式

grep是linux下一个重要的文本处理工具之一,全称是Globel Search Regular Expression and Printing out the line(全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,是一个对行进行操作的搜索工作,它能使用正则表达式搜索文本,并把匹配的行打印出来. grep家族包括grep.egrep和fgrep. egrep表示扩展的grep,相比grep支持更多的元字符,"grep -E"相当于egrep.fgrep是fast gr

VIM 第二天--快捷键

好吧,今天是重新学习vim的第二天,不得不说,收货丰厚. 先来勉励一下自己: 存活(目前状态) 感觉很好 感觉更好,更强,更快 吃用vim超能力 vimtutor练到lesson 7了,略微总结一下,主要是快捷键... vim快捷键: 首先是移动光标: 简单: h/j/k/l    右  上  下 左 复杂: num + h/j/k/l ,向指定方向移动 num 行或列 单词跳转 : 简单: w: 调到下一个首字母 e:调到下一个尾字母(包括当前单词) b:调到上一个首字母(包括当前单词) W/

终端提示符的配置

当安装完成一个Linux系统后,默认的终端一般是黑白颜色的,如何将提示符变成彩色的呢,这就需要在$HOME/.bashrc文件中通过对PS1的修改进行配置.下面是详细介绍. 注:本篇文章借鉴的是http://wsunwind.blog.sohu.com/192388839.html的相关说明 1 简单理解PS1 直接在termial中修改PS1变量就可以改变当前环境的提示符,选到自己喜欢的就可以写进.bashrc文件了. 例如,把PS1="This is my terminal:>&quo

ubuntu下定制Vim/Gvim及使用技巧

vim是linux下的编辑器之神,是玩linux的必备工具,同样emacs是神的编辑器,两个编辑器是各有千秋,看个人的喜好,青菜萝卜各有所爱.我是比较喜欢vim,用vim编写bash,perl,python脚本,以及修改配置文件等等,本文就主要介绍在Ubuntu下gvim环境的搭建,希望对大家有所帮助. 一. Ubuntu安装gvim方法 安装gvim的方法,最简单方法是在Ubuntu软件中心搜索gvim,然后点击安装即可,如下图: 如果使用命令行可以打开终端,输入sudo apt-get in

grep,egrep,,fgrep 与正则

一.grep grep [option] PATTERN [FILE...] 根据模式搜索文本,并将符合模式的文本行显示出来 Pattern: 文本字符和正则表达式的元字符组合而成的元字符 -i 忽略大小写 --color 匹配字符高亮 例子 grep --color 'root' /etc/passwd -v 反向显示,匹配到的不显示,显示没有匹配到的行 -o 只显示被模式匹配到的字符串 alias grep='grep --color' grep 'root' /etc/passwd 二.正

【linux_笔记】Linux_文本查找(grep)及正则表达式

学习资源来自:www.magedu.com 学习记录过程中难免出现错误,如有发现,还望大神们指出. 示例操作部分有的与历史操作有关,如果先前的示例操作没有执行过的话,可能会有部分示例的操作无法执行.示例仅供参考.(练习题在附录) 文本查找:grep, egrep, fgrep        grep(Global Research): 使用基本正则表达式定义的模式来过滤文本的命令                           根据模式搜索文本,并将符合模式的文本行显示出来.    egre

GVim一些常用快捷键

最近新入职,也打算玩玩vim 由于用的是Windows的系统,所以就用的gvim,也给以后linux和mac打下基础 vim版本7.4:http://pan.baidu.com/s/1dDvjfWX#path=%252FVim-7.4-for-windows-64bit-build 阅读了一下vim的用户文档,都是英文的,很蛋疼,但凑合着能看明白,下面列举下一些常用快捷键,有不对的希望更正. h是左,l是右,j是下,k是上 9k 是将光标上移9行,其他移位同理,9999k移动到文件首字符 ctr

智能拨号匹配算法(三)

完整源码在我的github上 https://github.com/NashLegend/QuicKid 有了匹配算法,下面是如何将搜索联系人并显示出来以及高亮显示匹配到的字符串. 1.搜索并显示联系人 显示列表当然是使用ListView,使用自定义的ContactAdapter,ContactAdapter继承BaseAdapter,并实现了Filterable接口,此接口中有一个getFilter方法,返回一个过滤用的类Filter,Filter需要自己实现,我们就是通过这个Filter实现

vim技巧2

vim技巧总结-查找 1.查找命令1.1 执行一次查找普通模式下,/会调用查找提示符,如果vim扫描到文档尾部仍没有找到目标,会提示"search hit BOTTOM, continuing at TOP".这意味着文档会回绕至开头继续查找.如果想关闭文档回绕查找,可以关闭'wrapscan'选项::set nowrapscan1.2 指定查找方向/键查找时,执行正向扫描,?键查找时,执行反向扫描.1.3 重复上一次查找n用于跳转到下一次匹配,N用于跳转到上一次匹配.1.4 回溯之前