3

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

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

4

2 回答 2

3

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

numericUpDown1.DecimalPlaces = 2;

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

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

于 2010-10-05T17:58:28.753 回答
2

插入键会弄乱文本中的输入和光标,因为获取值会弄乱插入符号的位置。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)
        {

        }
    }
于 2012-03-09T13:28:00.730 回答