2009-06-11 36 views
6

Nullabe tarihine bağlı maskelenmiş bir metin kutusu var, ancak tarih boş bırakıldığında, maskelenen metin kutusundaki doğrulama tamamlanmıyor. Bu davranışı zorlamak için bir yolu var mı? Boş bir DateTime eşit boş bir metin kutusu istiyorum.Null '' null '' DateTime to MaskedTextBox

Metin kutusu zaten boş olduğunda, doğrulama çalışır. Sadece, zaten bağlı bir tarih olduğunda kırılır ve onu boşaltmaya çalışırım.

cevap

4

o doğrulama ile ilgisi yoktu. Tarihin tarih saatine geri ayrıldığı zamandı.

Bunu yapmanın en zarif yolu bu olmayabilir, ancak işe yarıyor. Eğer daha iyi bir şekilde bilen varsa lütfen bana bildirin.

Şimdi bu koda sahibim.

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

Bu çalışması gerekir: Ben anladım

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

Daha kötüsü yapmış gibi görünüyor. Artık metin kutusunda zaten bir null olsa bile geçerli olmaz. Boş olarak başlatılmadan önce işe yaramadan önce, boş bırakılan bir tarih olduğunda işe yaramıyor. –

0

Bununla deney yaparak bunun için daha kolay bir çözüm buldum.

ADIM 1:

sizin MaskedTextBox bağlayıcıdır hattını arayın sizin Form.Designer.cs içinde (mine "mTFecha" denir). yani:

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

2. ADIM:

küçük kesmek uygulayın: Sen

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

Bitti demektir! aşağıda

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

Ben

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

ihtiyaç null tarih değeri varsa, sınıf bildiriminde null datetime türünü kullanın

datetime türü için maskedtextbox ile bu kullanmak

İlgili konular