看了一下NumericUpDown的源代码实现,它的value和text是关联的,本身是面向number的控件,所以做了一些约束。不能直接通过设置它的Text属性来自定义文本。
不过还是可以可以重写它的一些方法来实现,尤其是ValidateEditText这个方法,它会检测Text和Value并重设他们的值。如果我们重写这个方法可以避免它内部的检测:
protected override void ValidateEditText()
{
}
这样,我们可以使用它的Text属性来设其他文本了。具体代码参考:
public override void UpButton()
{
decimal valuecache = this.Value;
valuecache = valuecache + this.Increment;
if (valuecache > this.Maximum)
{
valuecache = this.Minimum;
}
this.Value = valuecache;
this.Text = FormatText(this.Value);
}
private string FormatText(decimal value)
{
if (this.Minimum == value)
return "关闭";
return string.Format("第{0}个数字", value);
}
public override void DownButton()
{
decimal valuecache = this.Value;
valuecache = valuecache - this.Increment;
if (valuecache < this.Minimum)
{
valuecache = this.Maximum;
}
this.Value = valuecache;
this.Text = FormatText(this.Value);
}
这样可以在down、up按钮的时候,显示定义后的文本。还可以重写Text属性来定义初始化的文本。
这种hacking的方法没有经过详细测试,不敢保证其他功能都能工作。事实上,如果时间允许的话,建议重新写一个面向文本的UpDown控件会比较好,可以参考NumericUpDown的基类UpDownBase ,网上也有一篇实现这个控件的文章可以参考:
http://www.codeproject.com/KB/vb/UpDownExwithmeasure.aspx