3

ValueC# アプリでコントロールの を要求すると、キャレットが位置 0 にリセットされることに気付きましたNumericUpDown。アプリが定期的にコントロールの値を取得しているため、これは面倒です。キャレットが予期せず移動し、入力を台無しにします。

これを防ぐ方法、または回避策はありますか? プロパティがないようです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 に答える