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);
}
}
}
- 測試效果