如题,就像我们在敲代码的时候,碰到public,class等关键字的时候,这些单词就会变蓝色请问这个功能在Richtextbox中怎么实现?谢谢了

解决方案 »

  1.   

    这里有个给关键字着色的Demo
    http://tech.ddvip.com/2008-11/122584560888971.html
      

  2.   

        public partial class RichTextBox : Form
        {
            public RichTextBox()
            {
                InitializeComponent();
            }        private void tSql_TextChanged(object sender, EventArgs e)  //文本框改变事件
            {
                int index = this.tSql.SelectionStart;    //记录修改的位置
                this.tSql.SelectAll();
                this.tSql.SelectionColor = Color.Black;
                string[] keystr =...{ "select ", "from ", "where ", " and ", " or ", " order ", " by ", " desc ", " when ", " case ",
                                                 " then ", " end ", " on ", " in ", " is ", " else ", " left ", " join ", " not ", " null " };
                for (int i = 0; i < keystr.Length; i++)
                    this.getbunch(keystr[i], this.tSql.Text);            this.tSql.Select(index, 0);     //返回修改的位置
                this.tSql.SelectionColor = Color.Black;        }
            public int getbunch(string p, string s)  //给关键字上色
            {
                int cnt = 0; int M = p.Length; int N = s.Length;
                char[] ss = s.ToCharArray(), pp = p.ToCharArray();
                if (M > N) return 0;
                for (int i = 0; i < N - M + 1; i++)
                {
                    int j;
                    for (j = 0; j < M; j++)
                    {
                        if (ss[i + j] != pp[j]) break;
                    }
                    if (j == p.Length)
                    {
                        this.tSql.Select(i, p.Length);
                        this.tSql.SelectionColor = Color.Blue;
                        cnt++;
                    }
                }
                return cnt;        }    }
      

  3.   

        public partial class RichTextBox : Form
        {
            public RichTextBox()
            {
                InitializeComponent();
            }        private void tSql_TextChanged(object sender, EventArgs e)  //文本框改变事件
             {
                int index = this.tSql.SelectionStart;    //记录修改的位置
                  this.tSql.SelectAll();
                this.tSql.SelectionColor = Color.Black;            string[] keystr ={ "select ", "from ", "where ", " and ", " or ", " order ", " by ", " desc ", " when ", " case ", " then ", " end ", " on ", " in ", " is ", " else ", " left ", " join ", " not ", " null " };
                for (int i = 0; i < keystr.Length; i++)
                    this.getbunch(keystr[i], this.tSql.Text);            this.tSql.Select(index, 0);     //返回修改的位置
                  this.tSql.SelectionColor = Color.Black;        }
            public int getbunch(string p, string s)  //给关键字上色
             {
                int cnt = 0; int M = p.Length; int N = s.Length;
                char[] ss = s.ToCharArray(), pp = p.ToCharArray();
                if (M > N) return 0;
                for (int i = 0; i < N - M + 1; i++)
                {
                    int j;
                    for (j = 0; j < M; j++)
                    {
                        if (ss[i + j] != pp[j]) break;
                    }
                    if (j == p.Length)
                    {
                        this.tSql.Select(i, p.Length);
                        this.tSql.SelectionColor = Color.Blue;
                        cnt++;
                    }
                }
                return cnt;
            }
        }
      

  4.   

    下面说的是什么意思,能否解释下
    【绘制颜色提议】  最好的做法是继承RichTextBox,重载新类的Paint方法。   并且在设置SelectionLength的时候,禁止控件的重绘过程,这样才不会出现被语法高亮的文本有一个突然选中的过程。   以下2个方法将会对你解决这一问题有很大的帮助.[DllImport("user32")]
    private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, IntPtr lParam);
    private const int WM_SETREDRAW = 0xB;//停止控件的重绘
    private void BeginPaint()
    {
    SendMessage(yourRichTextBox.Handle, WM_SETREDRAW, 0, IntPtr.Zero);
    }
    //允许控件重绘.
    private void EndPaint()
    {
    SendMessage(yourRichTextBox.Handle, WM_SETREDRAW, 1, IntPtr.Zero);
    yourRichTextBox.Refresh();
    }