如何强制重新显示UpDown框?

3

如何强制重绘UpDown框中的值?

我有一个应用程序,其中有许多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();

MS .NET版本3.5 SP1<br/>Visual Studio开发人员2008 - user209004
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;
        }
    }
}

这是一个非常好的答案,正是我在寻找的。谢谢!(我想给它点赞,但我还没有足够的声望。) - user209004
调用UpButton()解决方法的一个限制是,如果控件已经达到最大值,它仍然不会显示该值。但在任何情况下调用UpButton()和DownButton()都有效。 - user209004

2

我刚遇到了同样的问题,但我找到了另一种解决方法,可能有些用户更喜欢:

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

只需要将Text(一种隐藏属性,虽然IntelliSense不会建议但实际上存在)设置为非数字值(但不为空),即可强制控件呈现新值。如果在此之后不再为Value指定任何数字,则它将恢复控件最后有效的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接