我有一个绑定到nullabe日期时间的屏蔽文本框,但是当日期消隐时,屏蔽文本框上的验证将无法完成。有没有办法强迫这种行为?我想要一个空白的文本框等于null DateTime。
当文本框已为空时,验证有效。它只会在已经绑定日期时中断,我会尝试将其删除。
答案 0 :(得分: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;
}
答案 1 :(得分:1)
我将maskedtextbox
用于datetime
类型
this.txtDateBrth.DataBindings.Add("Text", bsAgent, "DateBrth", true, DataSourceUpdateMode.OnPropertyChanged, null, "dd/MM/yyyy");
如果需要null
日期值,请在类声明中使用可为空的datetime类型:
private DateTime? _DateBrth;
public DateTime? DateBrth
{
get { return _DateBrth; }
set { _DateBrth = value; }
}
答案 2 :(得分: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;
}
答案 3 :(得分:0)
试验这个我终于找到了一个更简单的解决方案。
第1步:
在Form.Designer.cs中搜索绑定了maskedtextbox(我的名为“mTFecha”)的行。即:
// 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, " / /"));
你做完了!
答案 4 :(得分:0)
您可以简单地给出如下日期格式:
maskTextBox1.DataBindings.Add("Text", bs, "SummitDate1", true, DataSourceUpdateMode.OnPropertyChanged, null, "dd/MM/yyyy");