[英]Converting tabs into spaces in a RichTextBox
我有一個帶有RichTextBox
控件的WinForms應用程序。 現在,我將AcceptsTabs
屬性設置為true,以便在單擊Tab時會插入一個Tab字符。
不過我想做的是使它在單擊Tab時插入4個空格而不是\\t
制表符(我使用的是等寬字體)。 我怎樣才能做到這一點?
在AcceptsTab屬性設置為true的情況下,只需嘗試使用KeyPress事件:
void richTextBox1_KeyPress(object sender, KeyPressEventArgs e) {
if (e.KeyChar == (char)Keys.Tab) {
e.Handled = true;
richTextBox1.SelectedText = new string(' ', 4);
}
}
根據您對每四個字符最多添加空格的評論,您可以嘗試如下操作:
void richTextBox1_KeyPress(object sender, KeyPressEventArgs e) {
if (e.KeyChar == (char)Keys.Tab) {
e.Handled = true;
int numSpaces = 4 - ((richTextBox1.SelectionStart - richTextBox1.GetFirstCharIndexOfCurrentLine()) % 4);
richTextBox1.SelectedText = new string(' ', numSpaces);
}
}
添加一個新類以覆蓋RichTextBox
:
class MyRichTextBox : RichTextBox
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if(keyData == Keys.Tab)
{
SelectionLength = 0;
SelectedText = new string(' ', 4);
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
然后,可以將新控件拖到窗體的“設計”視圖上:
注意:與@LarsTec的答案不同,此處不需要設置AcceptsTab
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.