7

我有一个绑定到空日期时间的蒙面文本框,但是当日期被空白时,蒙面文本框的验证将无法完成。有没有办法强制这种行为?我想要一个空白的文本框等于一个空的 DateTime。

当文本框已经为空时,验证有效。它仅在已绑定日期并且我尝试将其清除时才中断。

4

5 回答 5

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;
}
于 2009-06-12T13:35:21.897 回答
1

我将它与maskedtextboxfordatetime类型一起使用

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; }
        }
于 2015-09-07T07:44:11.387 回答
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;

}
于 2009-06-12T03:04:15.317 回答
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, "  /  /"));

你完成了!

于 2010-07-08T16:58:17.457 回答
0

您可以简单地给出如下日期格式:

maskTextBox1.DataBindings.Add("Text", bs, "SummitDate1", true, DataSourceUpdateMode.OnPropertyChanged, null, "dd/MM/yyyy");
于 2017-07-07T06:06:09.957 回答