2009-06-11 5 views
6

Ich habe ein maskiertes Textfeld, das an eine nulllase datetime gebunden ist, aber wenn das Datum ausgeblendet wird, wird die Überprüfung auf dem maskierten Textfeld nicht abgeschlossen. Gibt es eine Möglichkeit, dieses Verhalten zu erzwingen? Ich möchte ein ausgeblendetes Textfeld mit einer Null DateTime übereinstimmen.Binden Sie nullable DateTime zu MaskedTextBox

Wenn das Textfeld bereits null ist, funktioniert die Validierung. Es bricht nur, wenn ein Datum bereits gebunden ist und ich versuche es auszublenden.

Antwort

4

ich es mit der Validierung nicht herausgefunden hat zu tun. Es war, als das Datum auf die Datetime zurückversetzt wurde.

Dies ist möglicherweise nicht die eleganteste Art, dies zu tun, aber es funktioniert. Wenn jemand einen besseren Weg kennt, lass es mich wissen.

Ich habe diesen Code jetzt.

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

sollte diese Arbeit:

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

Das scheint es schlimmer gemacht zu haben. Jetzt wird es nicht validiert, selbst wenn bereits eine Null in der Textbox vorhanden war. Bevor es gut funktionieren würde, wenn es als null anfing, funktioniert es nur nicht, wenn ein Datum ausgeblendet wird. –

0

Experimentieren mit diesem fand ich endlich eine einfachere Lösung für diese.

Schritt 1:

die Linie suchen, die Ihre MaskedTextBox verbindlich in Ihrem Form.Designer.cs (meine ist "mTFecha" genannt). das heißt:

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

SCHRITT 2:

Tragen Sie eine kleinere Hack:

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

Sie sind fertig!

1

Ich benutze diese mit maskedtextbox für datetime Typ

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

wenn Bedarf null Datum Wert, Nullable-Datetime-Typ in Klassendeklaration verwenden:

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

Sie können einfach wie unten Datumsformat geben:

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