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; } }
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; } }
http://tech.ddvip.com/2008-11/122584560888971.html
{
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; } }
{
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;
}
}
【绘制颜色提议】 最好的做法是继承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();
}