我创建了一个非常简单的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;
  }
}

10-08 04:58