今天用C#在RichTextBox里面模拟一个可以高亮显示XML关键字的函数,但是做到要检查双引号的时候就卡了一下,因为双引号没有分左右,所以如果用类似检查括号的方法,行不通,后来一想,就试试用一个栈来完成,呵呵,真的是可以的。

//自定义函数,参数一个是RichTextBox类型,一个是字符串类型
public void HighLightText(RichTextBox rtb,string str)
        {
            rtb.Text = str;
            Stack stack = new Stack(); //创建一个栈
            int i = 0;
            int  m = 0;
            while (i < rtb.Text.Length)
            {
                m= rtb.Text.IndexOf("\"",i,rtb.Text.Length-i); //找到一个\""
                if (m != -1)
                {
                    i = m;
                    if (stack.Count == 0) //如果栈里面没有元素
                    {
                        stack.Push(m); //压进栈
                    }
                    else
                    {
                        rtb.SelectionStart = Convert.ToInt32(stack.Peek()); //把元素从栈中提出
                        rtb.SelectionLength = m - Convert.ToInt32(stack.Peek())+1; //得到要变色的字符长度
                        rtb.SelectionColor = Color.Red;
                        stack.Pop(); //删除栈头元素
                    }
                }
                i++;
            }
      }