簡體   English   中英

將制表符轉換為RichTextBox中的空格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM