C# WinForm计算器退格按钮问题:删除光标右侧字符而非左侧的解决方法
解决方案:修复退格按钮删除方向错误问题
你的代码存在两个核心问题:
- 错误地删除了文本最后一位字符,而非光标左侧的字符
- 光标位置处理逻辑混乱,最后强制将光标移到文本开头,不符合退格操作的预期
修改后的实现代码
private void DeleteTextValue() { var inputTextBox = this.UserInput; // 如果有选中的文本,直接删除选中内容 if (inputTextBox.SelectionLength > 0) { inputTextBox.Text = inputTextBox.Text.Remove(inputTextBox.SelectionStart, inputTextBox.SelectionLength); inputTextBox.SelectionStart = inputTextBox.SelectionStart; // 光标停在删除位置 } // 如果光标不在开头,删除左侧字符 else if (inputTextBox.SelectionStart > 0) { var cursorPos = inputTextBox.SelectionStart; // 删除光标左侧的字符(SelectionStart位置的前一位) inputTextBox.Text = inputTextBox.Text.Remove(cursorPos - 1, 1); // 光标位置左移一位 inputTextBox.SelectionStart = cursorPos - 1; } // 取消选中状态 inputTextBox.SelectionLength = 0; }
关键修改说明
- 增加选中文本处理:符合常规输入框退格逻辑,选中一段文本时按退格直接删除选中内容
- 针对光标位置删除:当没有选中内容时,判断光标是否在开头,若不在则删除
SelectionStart - 1位置的字符(即光标左侧) - 正确维护光标位置:删除左侧字符后,光标位置同步左移一位,符合用户操作习惯
- 移除错误的光标重置代码:原代码最后将
SelectionStart设为0的逻辑完全错误,已删除
内容的提问来源于stack exchange,提问作者Ammar Elsamman
相关产品推荐
相关产品推荐

