RichTextBox分行设置样式

RichTextBox比普通TextBox强大,就在于它能够包含多样式的数据,可以分段、分行自由设置需要的字体样式和颜色。看似简单,今天写的过程中却走了很多弯路,平时不注意的细节问题都显示出来,搞了大半天,终于收场,于是写下来供各位朋友参考,免得再走弯路。

遇到的最大问题是,明明分行选择的字符串,设置颜色和字体后,再增加数据,最终全部都变成设置的样式了。一步一步跟下来,发现问题的根源:换行符和增加字符串的方法。

手动增加一个换行符Envirement.NewLine,在RichTextBox的TextLength属性中会统计这个换行符,占一个长度,但是在Lines属性中却没有统计,因为,自动将这个换行符放在了下一行,即增加“×××”+Envirement.NewLine后,行数会变成增加2,而第二行什么都没有。

还有RichTextBox的Select方法的第一个参数是选择文本的起始位置,这个起始位置是从0开始的,不要认为从1开始,否则很容易就会多选一个而把下一行选进去,这样就会造成全部都选中了。

至于增加文本的方式,极力推荐用Append方法,因为最开始我就是用+=连接的,发现选择完一行后,再增加文本后,SelectionStart始终为0,想想也是,全部都删掉再增加的文本,起始位置可不就是0么。因此,为了向后移下行的选择位置,用Append方法增加文本,这样SelectionStart自动增加,只不过要在之前用变量记录下上次选择文本的结束位置。

下面就是简单的示例:

 1:   private void button1_Click(object sender, EventArgs e)
 2:  {
 3:    int selectStart = 0;
 4:   
 5:    richTextBox1.AppendText("??????????"+Environment.NewLine);
 6:    selectStart = richTextBox1.TextLength;
 7:    richTextBox1.Select(selectStart, richTextBox1.TextLength - 1);
 8:    richTextBox1.SelectionColor = Color.Red;
 9:    selectStart = richTextBox1.TextLength;
10:    richTextBox1.AppendText("??????????" + Environment.NewLine);
11:    richTextBox1.Select(selectStart, richTextBox1.TextLength - 1);
12:    richTextBox1.SelectionColor = Color.Blue; ;
13:    selectStart = richTextBox1.TextLength;
14:    richTextBox1.AppendText("??????????" + Environment.NewLine);
15:    richTextBox1.Select(selectStart, richTextBox1.TextLength - 1);
16:    richTextBox1.SelectionColor = Color.Green;
17:  }
posted @ 2009-11-10 12:26  混世者  阅读(1751)  评论(0编辑  收藏  举报