C# 获取NumericUpDown的值将移动插入符号位置,我可以停止此操作吗?
我注意到,当我在C应用程序中请求NumericUpDown控件的值时,插入符号被重置为位置0。这很烦人,因为我的应用程序会周期性地抓取控件的值,所以如果在用户输入控件时发生这种情况,插入符号会意外移动,干扰他们的输入C# 获取NumericUpDown的值将移动插入符号位置,我可以停止此操作吗?,c#,winforms,numericupdown,C#,Winforms,Numericupdown,我注意到,当我在C应用程序中请求NumericUpDown控件的值时,插入符号被重置为位置0。这很烦人,因为我的应用程序会周期性地抓取控件的值,所以如果在用户输入控件时发生这种情况,插入符号会意外移动,干扰他们的输入 有没有办法防止这种情况发生,或者有解决办法?它似乎没有SelectionStart属性,否则我可以让轮询过程保存插入符号位置,获取值,然后将其设置回正常的解决方法。我可以用小数点重现错误。在计时器滴答声事件中,或在任何输入值的位置,尝试添加以下代码: numericUpDown1.
有没有办法防止这种情况发生,或者有解决办法?它似乎没有SelectionStart属性,否则我可以让轮询过程保存插入符号位置,获取值,然后将其设置回正常的解决方法。我可以用小数点重现错误。在计时器滴答声事件中,或在任何输入值的位置,尝试添加以下代码:
numericUpDown1.DecimalPlaces = 2;
numericUpDown1.Select(numericUpDown1.Value.ToString().Length, 0);
无法获取SelectionStart,但如果从当前字符串的末尾进行选择并将选择长度设置为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)
{
}
}
我不能责备这件事。我有一个计时器,它每3秒获取一次值,并将标签控件文本设置为该值。如果在提取值时键入,则标签会更改,但插入符号不会发生任何变化。插入符号重置为开头的唯一时间是当数值大于设置的最大值时,此时该值也设置为最大值。嗯…似乎只有在发生格式化事件时才会发生。例如,如果我将DecimalPlaces设置为2,则如果字段中的字符串为36.1,插入符号将重置,但如果字符串为36.10,并且我正在键入值的整数部分,则插入符号不会重置…Afternote:因此,解决方案是从Numericupdown获取私有TextBoxBase。此外,我有一个数据绑定的数字上下边界。WriteValue会弄乱插入符号的位置,因为它会获取值并将其放入数据源中。因此,我通过在获取值之前获取插入符号位置,然后修复它来修复这个问题。