我创建了一个非常简单的NumericUpDownPlus,它通过以下方式覆盖UpdateEditText方法:(按照此SO问题:Having text inside NumericUpDown control, after the number)
protected override void UpdateEditText()
{
if (string.IsNullOrWhiteSpace(Units))
{
base.UpdateEditText();
}
else
{
this.Text = this.Value + " " + Units;
}
}
但是,这在手动编辑控件时给我带来了问题。在这种情况下,我将“ px”附加为我的单位,并且可能出现以下情况:
我选择了整个值(包括px),然后写入另一个值(即400),它可以正常工作,然后重新附加px。
我仅选择数字值,保留px,然后输入一个新值,但是它认为px是新值的一部分,并立即恢复为旧值。
当然,我只对数字感兴趣,而不关心使用的是什么单位,这只是给用户带来方便。如何获得此NumericUpDown进行合作?我本来只是想在控件获得焦点时清除框,但是我觉得这可能不是最佳解决方案。
最佳答案
protected override void UpdateEditText() {
if (string.IsNullOrWhiteSpace(Units)) {
base.UpdateEditText();
} else {
try {
Value = decimal.Parse(Text.Replace(Units, "").Trim());
} catch {
base.UpdateEditText();
}
this.Text = this.Value + " " + Units;
}
}