2013-03-14 71 views
1

我发现这个自定义类允许NumericUpDown接收空值。我在一个可以为空的编辑表单中使用它,或者可以使用来自数据库的数据填充来自需要可为空的值的数据。Windows窗体 - 自定义NumericUpDown为空

这是当前的代码:

public partial class NullableNumericUpDown : NumericUpDown 
    { 
     public NullableNumericUpDown() 
     { 
      InitializeComponent(); 
     } 

     public NullableNumericUpDown(IContainer container) 
     { 
      container.Add(this); 

      InitializeComponent(); 
     } 



     private int? _value; 

     [Bindable(true)] 
     public new int? Value 
     { 
      get 
      { 
       return _value; 
      } 
      set 
      { 
       _value = value; 
       if (value != null) 
       { 
        base.Value = (int)value; 
        Text = Value.ToString(); 
       } 
       else 
       { 
        Text = ""; 
       } 
      } 
     } 

     private void NullableNumericUpDown_ValueChanged(object sender, EventArgs e) 
     { 
      _value = (int)base.Value; 
     } 



     void NullableNumericUpDown_TextChanged(object sender, System.EventArgs e) 
     { 
      if (Text == "") 
      { 
       _value = null; 
      } 
     } 
    } 

我是相当新的C#,所以我不能说我完全理解的代码,但不过,我的问题是,当我用数据填充表单从数据库和NullableNumericUpDown有什么价值,比如说 - 3。当我将此值更改为5时,我从表格中提交的数据中获得的最终结果是53。另外,如果我删除3,然后按递增箭头我得到4。似乎最初的数据是保存在这个控制的整个生命周期中,我试图设置0在我认为它可能会帮助的一些目前的地方,但它不会,除了我需要摆脱这一事实初始值,如果控制的值被改变,实际上它不够,只是使其成为0因为如果我有空的控制,这一定是好的,并将其记录为null而不是0

只是要完成这里是我如何设置数据为NullableNumericUpDown控制:

numUpDnAreas.Value = entity.AreasCnt; 

这发生在我的form_load事件。当我点击Save按钮,我收集的数据与此:

entity.AreasCnt = numUpDnAreas.Value; 

可以将此代码进行重构,以满足我的需求,或者我应该离开它,只是使用类似MaskedTextBox或其他?

回答

1

您可以尝试使用扩展WPF工具包中的UpDown控件。 http://wpftoolkit.codeplex.com/wikipage?title=DecimalUpDown&referringTitle=Home 它可以解决你的问题,是开源。

我们已经在我们的项目中有类似的需求,我们通过创建一个包装文本框并设置绑定的自定义控件来编写我们自己的需求。 AllowNullValue string.empty

+0

谢谢,我是C#初学者,需要一个快速的解决方案,这似乎不存在,所以我要修改一个'MaskedTextBox'。无论如何,稍后在我的编程生涯中,我可能会回到你的答案。 – Leron 2013-03-14 11:10:23

+0

看看你是否可以使用工具包中的UpDownControl,测试它是否适用于你,几乎不会花费几分钟的时间,你总是可以回到你的MaskedTextBox – 2013-03-14 12:29:30