C# 中的虚拟数字键盘 - 是否有一种优雅的方式来更新 Textbox.SelectionStart?

Virtual number pad in C#- Is there an elegant way to update Textbox.SelectionStart?

我正在设计一个 Windows 形式的虚拟数字键盘。请假设我有 Del 键来删除 textbox 的字符。当我第一次点击 textbox 到 select 然后按下 Del 键时,字符相对于光标位置被正确删除。但是在更新文本内容后,SelectionStart 属性 变为零,我闪烁的光标消失了。我通过在更新 textbox 的内容并在最后修改它之前临时保存它的值来解决这个问题。

tempSelectionStart = enteredTextbox.SelectionStart; //save SelectionStart value temporarily 
enteredTextbox.Text = enteredTextbox.Text.Substring(0, enteredTextbox.SelectionStart - 1)
                    + enteredTextbox.Text.Substring(enteredTextbox.SelectionStart,
                      enteredTextbox.Text.Length - (enteredTextbox.SelectionStart));
enteredTextbox.SelectionStart = tempSelectionStart-1;

我想知道:

  1. 有没有更优雅的解决方法?
  2. 如何在第一次按下该键后让光标在文本框中保持闪烁?

谢谢。

改为使用 SelectedText 属性:

private void DeleteButton_Click(object sender, EventArgs e) {
    if (textBox1.SelectionLength == 0) textBox1.SelectionLength = 1;
    textBox1.SelectedText = "";
    textBox1.Focus();
}

private void BackspaceButton_Click(object sender, EventArgs e) {
    if (textBox1.SelectionLength == 0) {
        if (textBox1.SelectionStart > 0) {
            textBox1.SelectionStart--;
            textBox1.SelectionLength = 1;
        }
    }
    textBox1.SelectedText = "";
    textBox1.Focus();
}