现有string[] s;
    System.Drawing.Color[] c;需要用户在输入字符的时候检索s中的字符串并为其着色c;弥漫的地方。1、感觉思路很乱没头绪。
            2、方法有效的执行。
            3、用户删除字符的时候也需要检索并着色。
下面是现有方法。
       private void colour(string[] st,int c_i)
        {
            int v = richTextBox1.SelectionStart;            for (int cou = 0; cou < st.Length; cou++)
            {                string vp = st[cou].ToString();
                int counts_i = v - vp.Length;
                try
                {
                    for (int i = counts_i; i >= 0 && i + vp.Length <= richTextBox1.TextLength && i <= v + vp.Length; i++)
                    {
                        string temp = richTextBox1.Text.Substring(i, vp.Length).ToUpper();
                        if (temp.IndexOf(vp, 0, vp.Length) > -1)
                        {
                            richTextBox1.Select(i, vp.Length);
                            richTextBox1.SelectionColor = this.c_v[c_i];
                        }
                    }
                    richTextBox1.Select();
                    richTextBox1.SelectionStart = v;
                    richTextBox1.ForeColor = System.Drawing.Color.Black;
                    richTextBox1.SelectionLength = 0;
                    richTextBox1.SelectionColor = System.Drawing.Color.Black;                }
                catch (Exception ms)
                {
                    richTextBox1.SelectionStart = v;
                    richTextBox1.ForeColor = System.Drawing.Color.Black;                }
            }
        }

解决方案 »

  1.   

    private void ColorText(string s)
            {
                string str = this.richTextBox1.Text;
                int index = 0;
                while (str != "")
                {
                    int i = str.IndexOf(s);
                    if (i == -1)
                    {
                        break;
                    }
                    index += i;
                    this.richTextBox1.Select(index, s.Length);
                    this.richTextBox1.SelectionColor = System.Drawing.Color.Red;
                    this.richTextBox1.SelectionLength = 0;
                    str = str.Substring(i + s.Length);
                    index += s.Length;
                }
                this.richTextBox1.SelectionStart = this.richTextBox1.Text.Length;
                this.richTextBox1.SelectionColor = System.Drawing.Color.Black;
            }        private void richTextBox1_TextChanged(object sender, EventArgs e)
            {
                ColorText("test");
            }处理得比较简单...效果不太好,有闪烁...希望能对你有点帮助...
      

  2.   

    如果直接find,在改变selection区域的颜色,肯定会闪烁.
    应该自己构造Rtf,直接显示.
      

  3.   

    语误,不要介意嘛,能给一个构造rtf的例子吗?没做过。麻烦了shrinerain(圣影雨)
      

  4.   

    to 楼主.rtf格式也是一种标记语言格式.当然比html要麻烦一些比如在HTML中,换行是<br>,rtf中换行就是\par
    下面把一点html翻译成rtf
    <font color="#ff0000">test</font>rtf就是{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}
    {\colortbl ;\red255\green0\blue0;} <-color table,保存rtf颜色采用RGB,分号隔开
    \viewkind4\uc1\pard\lang2052\f0\fs17"
    \cf1test\cf0 <-中间test是文字,包在\cf1 \cf0之间表面test颜色是color table第一组颜色
    }
      

  5.   

    我正在看RTFV1.7规范.doc这个东西,我现在不清楚的有几个地方。
    1、rtf规范里面有类似函数这个定义吗?
    2、即使我用rtf构建里格式化文件用户输入字符的时候就不用检索自动着色了吗?
    3、用户删除字符的时候非着色关键字颜色是否能自动改变?rtf有办法能实现吗?
    如果rtf不能解决上面的3个问题,为什么要用rtf来着色?不能用其他的吗?
    刚刚接触rtf很多不理解的地方,希望shrinerain(圣影雨)帮忙解释一下。先谢谢了。
      

  6.   

    rtf只是一种标记语言...
    并没有编程语言的功能...所谓自动着色其实就是不停的检测,不停的扫描是否有关键词,并进行着色.当然有很多算法.比如用户打字.你可以全部分析一遍,着色...然而更好的方法是只分析改变的那一行,其他地方不动.
      

  7.   

    再比如,你不需要用户每次输入一个字符就着色.
    而是用户输入了终止符,比如 ; . 回车字符 等以后才进行着色,性能会好得多.再比如,将关键字存储在Hashtable,存储在数组中,存储在二叉树中.
    也会有明显的性能差距.
      

  8.   

    to shrinerain(圣影雨) 非常感谢你shrinerain(圣影雨) 我查看了一下rtf的文档.用rtf着色也要检索用户输入还要删除用户输入的字符加上自己写的rtf代码.这个着色的方法我昨天想了一个晚上.还是没有什么进展.不知道C#的编译器怎么为他的语言着色的.郁闷死了.我问题提供的那个方法是检索用户光标附近字符.不是整行.
      

  9.   

    你去下载SharpDevelop,看看它的着色方案好了