我有一個WinForms應用程序,其窗體上有一個RichTextBox
控件。現在,我將AcceptsTabs
屬性設置爲true,以便當選項卡被命中時,它將插入一個製表符。將製表符轉換爲RichTextBox中的空格
我想,雖然做的是讓這個當標籤被擊中,4位被插入一個\t
製表符(我使用的是等寬字體)來代替。我怎樣才能做到這一點?
我有一個WinForms應用程序,其窗體上有一個RichTextBox
控件。現在,我將AcceptsTabs
屬性設置爲true,以便當選項卡被命中時,它將插入一個製表符。將製表符轉換爲RichTextBox中的空格
我想,雖然做的是讓這個當標籤被擊中,4位被插入一個\t
製表符(我使用的是等寬字體)來代替。我怎樣才能做到這一點?
添加一個新的類重寫你的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
。
隨着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);
}
}
比我的更好的解決方案,但AppendText不是解決它的方法。如果脫字號的位置不同於最後的位置呢?儘管你可以從我的回答中摘錄一些片段! – 2013-04-24 00:03:20
@DannyBeckett沒想到通過。更新。 – LarsTech 2013-04-24 00:06:00
還有一件事。 'richTextBox1.SelectionLength = 0;'也是必需的......如果用戶突出顯示某些內容,該怎麼辦? ;) – 2013-04-24 00:07:11
使用控件上的按鍵事件來抑制'\ t'並在其位置插入''。 – 2013-04-23 23:53:17