添加文本后无法使用退格键删除

时间:2017-11-20 19:11:49

标签: c# winforms richtextbox

您好我正在编写文本编辑器。 我有这个代码用于添加括号:

char? lastChar = null;
if (richTextBox.Text != "")
{
    lastChar = richTextBox.Text[richTextBox.TextLength - 1];
}
if(lastChar == '(')
{
    richTextBox.AppendText(")");
}

当它添加这些括号时,它不能用退格键删除。

1 个答案:

答案 0 :(得分:0)

您无法删除它的原因是,只要您按Backspace,您的文字就会再次以'('结尾,并附加另一个')'。要禁用此功能,我们需要跟踪按下的键是否为Backspace键,如果是,请跳过您的逻辑(允许用户在自动附加的')'字符上退格并输入一些文本)。

假设您的代码在TextChanged事件中,您可以做的一件事就是创建一个私有变量,如果密钥是Backspace,则会在KeyDown事件中设置该变量,然后您将在TextChanged事件。

作为奖励,我将您现有的代码简化为一行:)

private bool lastKeyPressedWasBackspace;

private void richTextBox_KeyDown(object sender, KeyEventArgs e)
{
    lastKeyPressedWasBackspace = e.KeyCode == Keys.Back;
}

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
    if (!lastKeyPressedWasBackspace && richTextBox.Text.EndsWith("("))
    {
        richTextBox.AppendText(")");
    }
}