zoukankan      html  css  js  c++  java
  • 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:  }
  • 相关阅读:
    转义将正文中换行符
    THINKPHP短链接设置方法(路由设置)
    MEMCACHE分布式算法(PHP)
    win7下memCache安装过程
    JQUERY根据值将input控件选中!
    Thinkphp CURD中的where方法
    SQL语法LPAD和RPAD
    Linux查看docker容器日志
    Linux中清空docker容器日志
    错误记录——fail: Microsoft.AspNetCore.Server.Kestrel[13]
  • 原文地址:https://www.cnblogs.com/tristinjet/p/1599714.html
Copyright © 2011-2022 走看看