.net c # текстовое поле дата с маской - настройка - PullRequest
2 голосов
/ 20 мая 2010

У меня есть проект на c # .net, и я хочу ввести текстовое поле для значения даты. Я хочу, чтобы он отображал значение по умолчанию в мм / дд / гггг, а затем позволял пользователям вводить действительные даты.

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

Если я попытаюсь использовать / / ____ выглядит невнятно, как и 00/00/0000, и, конечно, если вы введете «0», как 03/11/2009, вы получите 3/11/29 потому что 0 удаляются как часть маски.

Каков наилучший способ настроить поле ввода, подобное этому, эффективно с маской, разрешающей только цифры и проверку (хотя на данный момент меня это не очень беспокоит).

Это выглядит так просто и не так.

Ответы [ 4 ]

1 голос
/ 20 мая 2010

Попробуйте проверить дату в событии OnChange.Проверьте длину текста, добавив / при необходимости.

В качестве альтернативы, посмотрите, может ли DatePicker быть лучшим выбором ...

0 голосов
/ 20 мая 2016

Использование замаскированного текстового поля для даты - головная боль, лучше всего использовать DateTime.TryParseExact() с проверенным событием контроля.

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

Вы также должны использовать ToolTip, чтобы указать пользователю правильный ввод.

private void txtEntryDate_Validated(object sender, EventArgs e)
   {
     if (!string.IsNullOrEmpty(txtEntryDate.Text))
       {
         DateTime entryDate;
        if (DateTime.TryParseExact(txtEntryDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out entryDate))
       {
         // further actions for validations
       }
       else
       {
       setTooltip(txtEntryDate, "txtEntryDate", "Invalid date format date must be formatted to dd/MM/yyyy");
                txtEntryDate.Focus();
        }
        }
        else
        {
        setTooltip(txtEntryDate, "txtEntryDate", "Please provide entry date in the format of dd/MM/yyyy");
        txtEntryDate.Focus();
        }
       }

и ToolTip класс:

private void setTooltip(Control Ctrl, string CtrlCaption, string ToolTipMsg)
        {
            ToolTip tt1 = new ToolTip();
            tt1.AutoPopDelay = 5000;
            tt1.InitialDelay = 1000;
            tt1.ReshowDelay = 500;
            tt1.ShowAlways = false;
            tt1.SetToolTip(Ctrl, CtrlCaption);
            tt1.Show(ToolTipMsg, Ctrl,5000);
        }
0 голосов
/ 20 мая 2010

В Windows Forms DateTimePicker является инструментом для работы.

Вот пример с MaskedTextBox , но, как вы говорите, он не работает ...

Еще одна хорошая попытка, если вы используете DataBinding, если создаете экземпляр класса Binding ( Binding для WPF ) и обрабатываете его Parse и Формат событий (кажется, их нет в WPF, но должен быть какой-то путь).

Короче говоря:

Binding b = new Binding("Text", BindingSourceInstance, "data.DateCreated");
b.Parse += new EventHandler(b_Parse);
b.Format += new EventHandler(b_Format);

private void b_Format(object sender, ConvertEventArgs e) {
    if (e.DesiredType != typeof(DateTime)) return;

    e.Value.ToString("dd/MM/yyyy");
    // Or you may prefer some other variants:
    // e.Value.ToShortDateString();
    // e.Value.ToLongDateString();
    // e.Value.ToString("dd/MM/yyyy", CultureInfo.CurrentCulture.DateTimeInfo.ShortDatePattern);
}

private void b_Parse(object sender, ConvertEventArgs e) {
    // Choose whether you to handle perhaps bad input formats...

    e.Value = DateTime.Parse(e.Value, CultureInfo.InvariantCulture); // The CultureInfo here may be whatever you choose.
}
0 голосов
/ 20 мая 2010

Почему бы не попробовать использовать такой плагин, как jQuery UI DatePicker?

http://docs.jquery.com/UI/Datepicker

Они легкие, протестированы и экономят работу!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...