【发布时间】:2013-08-30 13:28:50
【问题描述】:
我创建了一个非常简单的 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 合作?我想在控制获得焦点时清除该框,但我觉得这可能不是最好的解决方案。
【问题讨论】:
-
您还必须重写 ParseEditText() 方法。在您完成诸如从字符串中剥离“px”之类的操作后分配 Value 属性。
-
这很完美,我可以看到 ParseEditText 方法,但是当我尝试覆盖它时,它给了我
There is no suitable method for override并告诉我我正在向父类隐藏一个方法。跨度> -
哎呀,它是内部的。我讨厌 NUD :( 后备是覆盖 ValidateEditText()。解析它以分配 Value 并调用 UpdateEditText()。
-
我相信在
protected void ParseEditText前面使用new关键字将允许我“隐藏”基本方法,并提供我自己的实现。对吗? -
哈哈,太好了。感谢您的提示,我会按照您的方式试一试!
标签: c# .net winforms user-controls numericupdown