Value
C# アプリでコントロールの を要求すると、キャレットが位置 0 にリセットされることに気付きましたNumericUpDown
。アプリが定期的にコントロールの値を取得しているため、これは面倒です。キャレットが予期せず移動し、入力を台無しにします。
これを防ぐ方法、または回避策はありますか? プロパティがないようですSelectionStart
。それ以外の場合は、ポーリング プロセスでキャレットの位置を保存し、値を取得してから、適切な回避策として元に戻すことができます。
Value
C# アプリでコントロールの を要求すると、キャレットが位置 0 にリセットされることに気付きましたNumericUpDown
。アプリが定期的にコントロールの値を取得しているため、これは面倒です。キャレットが予期せず移動し、入力を台無しにします。
これを防ぐ方法、または回避策はありますか? プロパティがないようですSelectionStart
。それ以外の場合は、ポーリング プロセスでキャレットの位置を保存し、値を取得してから、適切な回避策として元に戻すことができます。
小数点でエラーを再現できます。タイマー ティック イベント (または値を取得する場所) で、次のコードを追加してみてください。
numericUpDown1.DecimalPlaces = 2;
numericUpDown1.Select(numericUpDown1.Value.ToString().Length, 0);
SelectionStart を取得することはできませんが、現在の文字列の末尾から選択してselection length
を 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)
{
}
}