WinForm RichTextBox 常用操作

XSpringSun發表於2021-10-21

1、設定不自動選擇字詞

RichTextBox在選擇文字的時候,如果沒有關閉自動選擇字詞功能,我們有時候選擇的時候會自動將游標前後的字或者詞連線在一起進行選擇。
RichTextBox有屬性AutoWordSelection 設定為false但是不起作用,需要在窗體的load或者載入後設定才能起作用。

private void Form_Load(object sender, EventArgs e)
{
    //去除RichTextBox自動選擇字詞
    richtextbox1.AutoWordSelection=false;
}

2、取得已被選中的內容

richtextbox1.SelectedText

3、程式碼選中文字,並對選中文字修改顏色

//選中要改變顏色的文字
richtextbox1.Select(position, length);
//修改選中文字顏色
richtextbox1.SelectionColor = Color.Red;

4、自動滾動滾動條到游標位置

//讓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 顯示特殊符號。
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
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 點選事件
 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);
        }
    }
}
  • 測試效果