获得NumericUpDown的值会移动插入位置,我可以阻止它吗?

时间:2010-10-05 16:39:27

标签: c# winforms numericupdown

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

有没有办法防止这种情况或解决方法?它似乎没有SelectionStart属性,否则我可以让轮询过程保存插入位置,获取值,然后将其设置为一个不错的解决方法。

2 个答案:

答案 0 :(得分:3)

我可以用小数点重现错误。在您的计时器刻度事件中(或者您提取值的任何地方),请尝试添加以下代码:

numericUpDown1.DecimalPlaces = 2;

numericUpDown1.Select(numericUpDown1.Value.ToString().Length, 0);

您无法获得SelectionStart,但如果您从当前字符串的末尾选择并将selection length设置为0,则应将插入符号保留在正确的位置。

答案 1 :(得分:2)

干预键会弄乱文本中的键入和光标,因为获取值会影响插入位置。因此,获得textboxbase和自己设置插入符号值的iffy解决方案。

    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)
        {

        }
    }