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;
我想知道:
- 有没有更优雅的解决方法?
- 如何在第一次按下该键后让光标在文本框中保持闪烁?
谢谢。
改为使用 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();
}
我正在设计一个 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;
我想知道:
- 有没有更优雅的解决方法?
- 如何在第一次按下该键后让光标在文本框中保持闪烁?
谢谢。
改为使用 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();
}