如何强制重新显示UpDown Boxes?

时间:2009-11-11 22:51:25

标签: c# user-interface numericupdown

如何强制重新显示UpDown框的值?

我有一个应用程序,它有许多UpDown框,用于在将文件加载到嵌入式设备之前设置配置文件的值。我可以从设备加载配置,并在相应的UpDown框中显示值。

但是,如果我删除UpDown框的内容然后更新它的值,则除非我使用集成按钮递增或递减值,否则不会重绘updown框的值。

重现的步骤:

  1. 启动App。
  2. 从UpDown框中删除值,使其不显示任何内容
  3. 更改UpDownBox的.Value,仍然没有显示任何值。
  4. 使用按钮递增或递减UpDown框,将显示正确更改的值。
  5. 我尝试了以下内容而没有任何变化。:

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

2 个答案:

答案 0 :(得分: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;
        }
    }
}

答案 1 :(得分:2)

我刚刚面临同样的问题,我找到了一些用户可能更喜欢的解决方法:

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

Text(IntelliSense不建议但存在的隐藏属性)设置为非数字值(但不为空)会强制控件呈现新值。如果之后没有为Value分配任何数字,它将恢复该控件的最后一个有效值。