Привязать обнуляемый DateTime к MaskedTextBox - PullRequest
6 голосов
/ 11 июня 2009

У меня есть текстовое поле в маске, привязанное к дате и времени nullabe, но когда дата не отображается, проверка в текстовом поле не будет завершена. Есть ли способ заставить это поведение? Я хочу, чтобы пустое текстовое поле равнялось нулю DateTime.

Когда текстовое поле уже пусто, проверка работает. Он прерывается только тогда, когда дата уже связана, и я пытаюсь ее убрать.

Ответы [ 5 ]

4 голосов
/ 12 июня 2009

Я понял, что это не имеет отношения к проверке. Это было, когда дата анализировалась обратно к дате.

Возможно, это не самый элегантный способ сделать это, но он работает. Если кто-нибудь знает лучший способ, пожалуйста, дайте мне знать.

У меня есть этот код сейчас.

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 голос
/ 07 сентября 2015

Я использую это с maskedtextbox для datetime типа

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; }
        }
0 голосов
/ 07 июля 2017

Вы можете просто указать формат даты, как показано ниже:

maskTextBox1.DataBindings.Add("Text", bs, "SummitDate1", true, DataSourceUpdateMode.OnPropertyChanged, null, "dd/MM/yyyy");
0 голосов
/ 08 июля 2010

Экспериментируя с этим, я наконец нашел более простое решение для этого.

ШАГ 1:

Поиск строки, которая связывает ваш maskedtextbox (мой называется "mTFecha") в вашем Form.Designer.cs то есть:

 // 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, "  /  /"));

Готово!

0 голосов
/ 12 июня 2009

Это должно работать:

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;

}
...