2009-06-11 9 views
6

nullabe datetimeにバインドされたマスクされたテキストボックスがありますが、日付が空白になると、マスクされたテキストボックスの検証は完了しません。この動作を強制する方法はありますか?空白のテキストボックスをnullのDateTimeに等しくしたい。nullable DateTime to MaskedTextBoxをバインドします

テキストボックスがすでにヌルの場合、検証が機能します。すでに縛られている日付があるときにだけ壊れてしまい、私はそれを空白にしようとします。

答えて

4

それは検証して行う必要はありませんでした。それは、日付がdatetimeに解析されていたときでした。

これはこれを行う最もエレガントな方法ではないかもしれませんが、動作します。誰かがより良い方法を知っているなら、私に知らせてください。

私は今このコードを持っています。

public static void FormatDate(MaskedTextBox c) { 
    c.DataBindings[0].Format += new ConvertEventHandler(Date_Format); 
    c.DataBindings[0].Parse += new ConvertEventHandler(Date_Parse); 
} 

private static void Date_Format(object sender, ConvertEventArgs e) { 
    if (e.Value == null) 
     e.Value = ""; 
    else 
     e.Value = ((DateTime)e.Value).ToString("MM/dd/yyyy"); 
} 

static void Date_Parse(object sender, ConvertEventArgs e) { 
    if (e.Value.ToString() == "//") 
     e.Value = null; 
} 
0

これは動作するはずです:私は考え出し

private void Form1_Load(object sender, EventArgs e) 
{ 
    maskedTextBox1.Mask = "00/00/0000"; 
    maskedTextBox1.ValidatingType = typeof(System.DateTime); 
    maskedTextBox1.TypeValidationCompleted += new TypeValidationEventHandler 
     (maskedTextBox1_TypeValidationCompleted); 
} 



private void TypeValidationCompletedHandler(object sender, TypeValidationEventArgs e) 
{ 
    e.Cancel = !e.IsValidInput && 
     this.maskedTextBox1.MaskedTextProvider.AssignedEditPositionCount == 0; 

} 
+0

これは悪化したようです。今では、すでにテキストボックスにヌルがあっても検証されません。それがnullとして開始された場合、それが正常に動作する前に、空白になる日付がある場合にのみ動作しません。 –

0

私はようやくこれを簡単に解決しました。

STEP 1:

あなたForm.Designer.csであなたのmaskedtextbox( "mTFecha" と呼ばれる鉱山の)を結合されている行を検索します。すなわち:

// mTFecha 
// 
this.mTFecha.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.listaAnimalesOfertadosBindingSource, "F_peso", true); 

STEP 2:設定が完了し

this.mTFecha.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.listaAnimalesOfertadosBindingSource, "F_peso", true, System.Windows.Forms.DataSourceUpdateMode.OnValidation, "//")); 

マイナーなハックを適用します!

私はクラス宣言でNULL可能日時の種類を使用し、必要 null日付の値ならば datetimeタイプ

this.txtDateBrth.DataBindings.Add("Text", bsAgent, "DateBrth", true, DataSourceUpdateMode.OnPropertyChanged, null, "dd/MM/yyyy"); 

ためmaskedtextboxでこれを使用

1

private DateTime? _DateBrth; 
     public DateTime? DateBrth 
     { 
      get { return _DateBrth; } 
      set { _DateBrth = value; } 
     } 
0

あなたは、単に以下のように日付フォーマットを与えることができます。

maskTextBox1.DataBindings.Add("Text", bs, "SummitDate1", true, DataSourceUpdateMode.OnPropertyChanged, null, "dd/MM/yyyy");