我有一个绑定到空日期时间的蒙面文本框,但是当日期被空白时,蒙面文本框的验证将无法完成。有没有办法强制这种行为?我想要一个空白的文本框等于一个空的 DateTime。
当文本框已经为空时,验证有效。它仅在已绑定日期并且我尝试将其清除时才中断。
我有一个绑定到空日期时间的蒙面文本框,但是当日期被空白时,蒙面文本框的验证将无法完成。有没有办法强制这种行为?我想要一个空白的文本框等于一个空的 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;
}
我将它与maskedtextbox
fordatetime
类型一起使用
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; }
}
这应该有效:
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;
}
对此进行试验,我终于找到了一个更简单的解决方案。
第1步:
在 Form.Designer.cs 中搜索绑定掩码文本框(我的称为“mTFecha”)的行。IE:
// 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, " / /"));
你完成了!
您可以简单地给出如下日期格式:
maskTextBox1.DataBindings.Add("Text", bs, "SummitDate1", true, DataSourceUpdateMode.OnPropertyChanged, null, "dd/MM/yyyy");