将制表符转换为RichTextBox中的空格

时间:2013-04-23 23:45:27

标签: c# winforms richtextbox

我在表单上有一个RichTextBox控件的WinForms应用程序。现在,我将AcceptsTabs属性设置为true,这样当点击 Tab 时,它会插入一个制表符。

我想做的是,当点击 Tab 时,插入4个空格而不是\t制表符(我使用的是等宽字体) 。我怎么能这样做?

2 个答案:

答案 0 :(得分:6)

将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);

  }
}

答案 1 :(得分:2)

添加新课程以覆盖您的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