WinForm RichTextBox 常用操作

2021-10-25 13:35:13 浏览数 (1)

1、设置不自动选择字词

RichTextBox在选择文字的时候,如果没有关闭自动选择字词功能,我们有时候选择的时候会自动将光标前后的字或者词连接在一起进行选择。 RichTextBox有属性AutoWordSelection 设置为false但是不起作用,需要在窗体的load或者加载后设置才能起作用。

代码语言:javascript复制
private void Form_Load(object sender, EventArgs e)
{
    //去除RichTextBox自动选择字词
    richtextbox1.AutoWordSelection=false;
}

2、取得已被选中的内容

代码语言:javascript复制
richtextbox1.SelectedText

3、代码选中文字,并对选中文字修改颜色

代码语言:javascript复制
//选中要改变颜色的文字
richtextbox1.Select(position, length);
//修改选中文字颜色
richtextbox1.SelectionColor = Color.Red;

4、自动滚动滚动条到光标位置

代码语言:javascript复制
//让RichTextBox获得焦点
 richtextbox1.Select(); 
 //将光标位置在RichTextBox的最后
 richtextbox1.Select(richtextbox1.TextLength,0);
 //滚动条滚动到光标位置
 richtextbox1.ScrollToCaret() ; 

5、设置是否自动换行

设置RichTextBox的 WordWrap 属性,true 为自动换行,false 为不自动换行。

6、接受tab键

设置 AcceptsTab 属性为 True

7、RichTextBox特殊符号输入辅助窗体

  • 首先建一个Winform窗体spcalCharWindow 用于显示特殊符号辅助窗体,设置TopMost = true
  • 在窗体里面用ListView 显示特殊符号。
代码语言:javascript复制
private void spcalCharWindow_Load(object sender, EventArgs e)
{
    lv1.MultiSelect = false;
    lv1.Scrollable = true;

    StringBuilder sb = new StringBuilder(200);
    sb.Append("①②③④⑤⑥⑦⑧⑨⑩");
    sb.Append("αβγδεζηφωοπθικλμνξχΩ");
    sb.Append("ρστυψАБВГДЕЁЖЗИЙКЛМО");
    sb.Append("НПРСⅨⅩⅪⅫⅧⅦⅥⅤⅣⅢⅡⅠЯЮЭТ");
    sb.Append("УФХЦЬЪЧШЩ≈≡≠≤≥≮≯<>±+");
    sb.Append("-×÷/∫∮∝∞∷∧∨∑∏∪∩∈∵∴⊥");
    sb.Append("∠⌒⊙≌∽√°′″$£¥‰%℃¤¢§№");
    sb.Append("△→←↑↓♂♀■");
    sb.Append("ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧÀÁÂÃÅÄÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÖÕØÙÚÛÜÝÞŠŸŒ");
    sb.Append("àáâãäåæçèéêëìíîïðñòóõôöøùúûüýþšÿœ");
    sb.Append("āáǎàōóǒòêńēéěèīíǐìňūúǔùǖǘǚǜü"); //拼音注音

    for (int i = 0; i < sb.Length; i  )
    {
        lv1.Items.Add(sb[i].ToString());
        lv1.Items[i].Tag = sb[i].ToString();
    }
}
  • 在窗体中定义一个 public Action<string> InputeSpecal 委托。
  • 点击生僻字辅助按钮后,弹出窗体,注册委托事件 InputeSpecal
代码语言:javascript复制
private void btnSpecailChar_Click(object sender, EventArgs e)
{
    SpcalCharWindow spcalCharWindow = new SpcalCharWindow();
    spcalCharWindow.InputeSpecal = (str) =>
    {
        //我的是在一个容器里面找到当前激活的RichTextBox,这个逻辑不用参照
        var activeControl = splitContainerTitle.ActiveControl;
        if (activeControl != null && activeControl is RichTextBox)
        {
            //将生僻字赋值到粘贴板上,
            Clipboard.SetText(str);
            //找到激活RichTextBox
            var activeRichTextBox = activeControl as RichTextBox;
            //通过Paste粘贴过去,因为我们的光标在辅助窗体上,所以无法获得RichTextBox的光标位置
            //这一步是实现 不用RichTextBox获得光标的关键,因为获得光标会使住窗体和辅助窗体切换,体验极差
            activeRichTextBox.Paste();
        }
    };
    spcalCharWindow.Show(this);
}
  • ListView 点击事件
代码语言:javascript复制
 private void lv1_MouseDoubleClick(object sender, MouseEventArgs e)
{
     if (lv1.SelectedItems.Count > 0)
    {
        string str = lv1.SelectedItems[0].Tag.ToString();
        if (!string.IsNullOrEmpty(str))
        {

            InputeSpecal?.Invoke(str);
        }
    }
}
  • 测试效果

0 人点赞