3

UpDown ボックスの値を強制的に再表示するにはどうすればよいですか?

ファイルを組み込みデバイスにロードする前に、構成ファイルの値を設定するための多数の UpDown ボックスを持つアプリケーションがあります。デバイスから構成をロードし、適切な UpDown ボックスに値を表示できます。

ただし、UpDown ボックスの内容を削除してからその値を更新すると、統合されたボタンで値をインクリメントまたはデクリメントしない限り、アップダウン ボックスの値は再描画されません。

再現するための手順:

  1. アプリを起動します。
  2. UpDown ボックスから値を削除して何も表示しないようにする
  3. UpDownBox の .Value を変更しても、まだ値が表示されません。
  4. ボタンで UpDown ボックスを増減すると、正しく変更された値が表示されます。

変更なしで次のことを試しました。

            fenceNumberUpDown.Value = config.getFenceNumber();
            fenceNumberUpDown.Refresh();
            fenceNumberUpDown.Update();
            fenceNumberUpDown.ResetText();
            fenceNumberUpDown.Select();
            fenceNumberUpDown.Hide();
            fenceNumberUpDown.Show();
            fenceNumberUpDown.Invalidate();
4

2 に答える 2

4

これは、私が思いついた、または問題を解決するための他のアイデアを提供する可能性のあるいくつかの回避策です。

回避策 #1:値を設定する前に UpButton() を呼び出します。

this.numericUpDown1.UpButton();
this.numericUpDown1.Value = 20;

回避策 #2: NumericUpDown を拡張し、Value プロパティをオーバーライドします。

public class NumericUpDownNew : NumericUpDown
{
    public new decimal Value
    {
        get { return base.Value; }
        set 
        {
            string text = "";
            if(this.ThousandsSeparator)
                text = ((decimal)value).ToString("n" + this.DecimalPlaces);
            else
                text = ((decimal)value).ToString("g" + this.DecimalPlaces);

            Controls[1].Text = text;
            base.Value = value;
        }
    }
}
于 2009-11-12T06:28:01.450 に答える
2

この同じ問題に直面したばかりで、一部のユーザーが好む可能性のある別の回避策を見つけました。

numUpDown.Text = " ";
numUpDown.Value = 12.34m;

Text(IntelliSense が提案しないが存在する隠しプロパティ) を数値以外の値 (ただし空ではない) に設定するだけで、コントロールは新しい値をレンダリングするように強制されます。後で番号を割り当てValueないと、コントロールが持っていた最後の有効な値が復元されます。

于 2016-08-08T01:53:29.407 に答える