Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取NumericUpDown的值将移动插入符号位置,我可以停止此操作吗?_C#_Winforms_Numericupdown - Fatal编程技术网

C# 获取NumericUpDown的值将移动插入符号位置,我可以停止此操作吗?

C# 获取NumericUpDown的值将移动插入符号位置,我可以停止此操作吗?,c#,winforms,numericupdown,C#,Winforms,Numericupdown,我注意到,当我在C应用程序中请求NumericUpDown控件的值时,插入符号被重置为位置0。这很烦人,因为我的应用程序会周期性地抓取控件的值,所以如果在用户输入控件时发生这种情况,插入符号会意外移动,干扰他们的输入 有没有办法防止这种情况发生,或者有解决办法?它似乎没有SelectionStart属性,否则我可以让轮询过程保存插入符号位置,获取值,然后将其设置回正常的解决方法。我可以用小数点重现错误。在计时器滴答声事件中,或在任何输入值的位置,尝试添加以下代码: numericUpDown1.

我注意到,当我在C应用程序中请求NumericUpDown控件的值时,插入符号被重置为位置0。这很烦人,因为我的应用程序会周期性地抓取控件的值,所以如果在用户输入控件时发生这种情况,插入符号会意外移动,干扰他们的输入


有没有办法防止这种情况发生,或者有解决办法?它似乎没有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会弄乱插入符号的位置,因为它会获取值并将其放入数据源中。因此,我通过在获取值之前获取插入符号位置,然后修复它来修复这个问题。