2013-03-14 94 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