我有一个应用程序,它有许多UpDown框,用于在将文件加载到嵌入式设备之前设置配置文件的值。我可以从设备加载配置,并在相应的UpDown框中显示值。
但是,如果我删除UpDown框的内容然后更新它的值,则除非我使用集成按钮递增或递减值,否则不会重绘updown框的值。
重现的步骤:
我尝试了以下内容而没有任何变化。:
fenceNumberUpDown.Value = config.getFenceNumber();
fenceNumberUpDown.Refresh();
fenceNumberUpDown.Update();
fenceNumberUpDown.ResetText();
fenceNumberUpDown.Select();
fenceNumberUpDown.Hide();
fenceNumberUpDown.Show();
fenceNumberUpDown.Invalidate();
答案 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
分配任何数字,它将恢复该控件的最后一个有效值。