0


求一个自定义MyNumericUpDown,功能,假设范围[min,max],当前值value 如果点击UpDown改变数值,则有:

   if(value>max)value=min;// value=max时Up  
   if(value<min)value=max; //value=min时Down

手动输入则不同, 输入小于min就等于min 大于max就等于max 输入空(Delete等键清除原有值)等于min.

允许显示文字. 例如:

  • value=min时显示'关'
  • value=1时显示'第一个文字值'
  • value=2时显示'第二个文字值'
  • value=3时显示'第三个文字值'
垃圾帖?
更新于2009-01-23 23:43:08
348 2 10
提问于2009-01-18 14:20:11
143 2 5
添加评论
0


看了一下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

永久链接 | 垃圾帖?
回答于2009-01-18 14:33:37
348 2 10
添加评论




Made with Django.

当前版本: R-0127-20090523

cc-wiki