现有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; }
}
}
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; }
}
}
解决方案 »
- 判断坐标点是否在圆内
- ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver] 操作必须使用一个可更新的查询。
- Oracle动态纵表转横表语句[高分]
- 怎么循环遍历结构体?
- 求C#中Message的所有消息代号。并把每一种消息代号中的所有消息(十六进制)列出来,每一个对应的消息(十六进制数)旁边都有注释有什么用。最好以列表形式说明,谢谢。
- 如何防止页面被非法访问??
- C#怎么调用VB写的DLL
- 如何捕获引用时的异常
- 数据转换的问题
- 急!急!如何读取正在使用中的文件
- CSDN查询怎么越来越烂
- 在C#.NET操作Word时,不能同时有Word文档处于打开状态???
{
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");
}处理得比较简单...效果不太好,有闪烁...希望能对你有点帮助...
应该自己构造Rtf,直接显示.
下面把一点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第一组颜色
}
1、rtf规范里面有类似函数这个定义吗?
2、即使我用rtf构建里格式化文件用户输入字符的时候就不用检索自动着色了吗?
3、用户删除字符的时候非着色关键字颜色是否能自动改变?rtf有办法能实现吗?
如果rtf不能解决上面的3个问题,为什么要用rtf来着色?不能用其他的吗?
刚刚接触rtf很多不理解的地方,希望shrinerain(圣影雨)帮忙解释一下。先谢谢了。
并没有编程语言的功能...所谓自动着色其实就是不停的检测,不停的扫描是否有关键词,并进行着色.当然有很多算法.比如用户打字.你可以全部分析一遍,着色...然而更好的方法是只分析改变的那一行,其他地方不动.
而是用户输入了终止符,比如 ; . 回车字符 等以后才进行着色,性能会好得多.再比如,将关键字存储在Hashtable,存储在数组中,存储在二叉树中.
也会有明显的性能差距.