添加文本后无法使用退格键删除
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(")");
}
}
您好,我正在研究文本编辑器。 我有这个添加括号的代码:
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(")");
}
}