WinForm RichTextBox 常用操作

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);
        }
    }
}
  • 測試效果
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章