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

After adding text can't remove with backspace

您好,我正在研究文本编辑器。 我有这个添加括号的代码:

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

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

你不能删除它的原因是因为你一按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(")");
    }
}