内容发布更新时间 : 2024/12/27 19:51:59星期一 下面是文章的全部内容请认真阅读。
C#开发高亮语法编辑器(一)——TextBox ,RichTextBox
C#简单实现高亮语法编辑器(一)
——TextBox ,RichTextBox的局限性
一、RichTextBox基本设置 二、实现语法高亮 三、关键字提示 四、实现行号
就简单快速得开发文本编辑器TextBox 最为简单,大家用得也多,缺点是无法实现复杂的操作。RichTextBox虽然是则功能比它强大很多。
图 1.1 输入框控件关系
这里要实现以下功能的编辑器: 1、实现语法高亮; 2、关键字提示; 3、行号。
显然TextBox 无法完成我们的任务,虽然都派生自TextBoxBase,但就控制力而言RichTextBox比它优秀很多。这里选用RichTextBox尝试开发。
注:以下只讨论简单开发,不考虑复杂的关键字查找机制。
一、RichTextBox基本设置
这里先建立一个工程,建立窗体Form1。
可以简单添加RichTextBox控件,可以在Form1_Load中建立。代码如下:
1 this.WindowState = System.Windows.Forms.FormWindowState.Maximized; 2
3 RichTextBox rich = new RichTextBox(); 4 rich.Multiline = true;
5 rich.Height = this.Height - 100; 6 rich.Width = this.Width - 100; 7 rich.Left = 40; 8 rich.Top = 40;
9 rich.WordWrap = true; 10 rich.Text = \
11 rich.ScrollBars = RichTextBoxScrollBars.ForcedVertical; 12 this.Controls.Add(rich);
这样就建立了简单的RichTextBox,宽度和高度都设置了。没有做Form1窗体缩放的处理。
二、实现语法高亮
在RichTextBox里实现语法高亮还是非常简单的。可以使用 1 rich.Select(0,1);
2 rich.SelectionFont = new Font(\宋体\3 rich.SelectionColor = Color.Blue;
意思是,先选择第一个字母,按上面的设置,选择到了数字‘1’,然后设置这个字的字体大小,再设置字的颜色。
如果对关键字进行处理(这里只处理光标向后流动的情况) 首先添加输入事件
1 rich.KeyDown += new KeyEventHandler(rich_KeyDown); //这一行添加到Form1_Load中 2
3 void rich_KeyDown(object sender, KeyEventArgs e) 4 {
5 //throw new Exception(\6 }
建立关键字
1 public static List
3 List
当KeyDown事件发生时,向前查找 1 //返回搜索字符
2 public static string GetLastWord(string str,int i)
3 {
4 string x = str;
5 Regex reg= new Regex(@\ 6 x = reg.Match(x).Value; 7
8 Regex reg2 = new Regex(@\ 9 x = reg2.Replace(x, \10 return s; 11 }
1 void rich_KeyDown(object sender, KeyEventArgs e) 2 {
3 RichTextBox rich = (RichTextBox)sender;
4 //throw new Exception(\ 5 string s = GetLastWord(rich.Text, rich.SelectionStart); 6
7 if (AllClass().IndexOf(s) > -1) 8 {
9 MySelect(rich, rich.SelectionStart, s, Color.CadetBlue, true); 10 } 11 }
1 //设定颜色
2 public static void MySelect(System.Windows.Forms.RichTextBox tb, int i, string s, Color c,bool font) 3 {
4 tb.Select(i - s.Length, s.Length); 5 tb.SelectionColor = c; //是否改变字体 6 if(font)
7 tb.SelectionFont = new Font(\宋体\ 8 else
9 tb.SelectionFont = new Font(\宋体\ //以下是把光标放到原来位置,并把光标后输入的文字重置 10 tb.Select(i,0);
11 tb.SelectionFont = new Font(\宋体\12 tb.SelectionColor = Color.Black; 13 }
这样就完成了高亮工作。
三、关键字提示