2009-06-11 114 views
6

我有一個被遮罩的文本框綁定到nullabe日期時間,但是當日期空白時,掩碼文本框上的驗證將不會完成。有沒有辦法強制這種行爲?我想要一個空白的文本框等於一個空的DateTime。綁定可以爲空的DateTime到MaskedTextBox

當文本框已經爲空時,驗證工作。它只有當有一個日期已經綁定的時候纔會中斷,我試圖將其清空。

回答

4

我想通了,它沒有與審定做。這是日期被解析回日期時間。

這可能不是最優雅的方式來做到這一點,但它確實有效。如果有人知道更好的方法,請告訴我。

我現在有這個代碼。

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,它也不會驗證。如果它開始爲空,它將工作正常,它只有在有一個空白的日期時才起作用。 – 2009-06-12 13:20:50

0

試驗這個,我終於找到了一個更簡單的解決方案。

STEP 1:

搜索是結合您的MaskedTextBox中的線(我的是所謂的 「mTFecha」)在您的Form.Designer.cs。即:

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

第2步:

應用小黑客:

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

你就大功告成了!

1

我用這個與maskedtextboxdatetime

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

如果需要null日期值,使用類聲明爲空的日期時間類型:

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"); 
相關問題