我注意到,当我在 C# 应用程序中请求Value
控件NumericUpDown
时,插入符号被重置为位置 0。这很烦人,因为我的应用程序会定期获取控件的值,所以如果在用户输入时发生这种情况插入符号意外移动,弄乱了他们的输入。
有没有办法防止这种情况,或者解决方法?它似乎没有SelectionStart
属性,否则我可以让轮询过程保存插入符号位置,获取值,然后将其设置回一个不错的解决方法。
我注意到,当我在 C# 应用程序中请求Value
控件NumericUpDown
时,插入符号被重置为位置 0。这很烦人,因为我的应用程序会定期获取控件的值,所以如果在用户输入时发生这种情况插入符号意外移动,弄乱了他们的输入。
有没有办法防止这种情况,或者解决方法?它似乎没有SelectionStart
属性,否则我可以让轮询过程保存插入符号位置,获取值,然后将其设置回一个不错的解决方法。
我可以用小数点重现错误。在您的计时器滴答事件中(或您要提取值的任何地方),尝试添加以下代码:
numericUpDown1.DecimalPlaces = 2;
numericUpDown1.Select(numericUpDown1.Value.ToString().Length, 0);
您无法获得 SelectionStart,但如果您从当前字符串的末尾选择并将 设置selection length
为 0,它应该将插入符号保留在正确的位置。
插入键会弄乱文本中的输入和光标,因为获取值会弄乱插入符号的位置。textboxbase
因此,我们自己获取并设置插入符的值的不确定解决方案。
private void numericUpDown_KeyUp(object sender, KeyEventArgs e)
{
try
{
NumericUpDown numericUpDownsender = (sender as NumericUpDown);
TextBoxBase txtBase = numericUpDownsender.Controls[1] as TextBoxBase;
int currentCaretPosition = txtBase.SelectionStart;
numericUpDownsender.DataBindings[0].WriteValue();
txtBase.SelectionStart = currentCaretPosition;
}
catch (Exception ex)
{
}
}