Маскированный TextBox Проверка текстовой ошибки - PullRequest
2 голосов
/ 09 февраля 2012

У меня возникли проблемы с переменными даты, извлеченными из замаскированного текстового поля в приложении WinForms. Код, который пытается прочитать дату ввода пользователя, выглядит следующим образом:

DateTime datExpDate = new DateTime();
datExpDate = (DateTime)txtExpDate.ValidateText();     

Но я получаю ошибку NullReferenceException, даже если замаскированное текстовое поле определенно не равно Null.

Свойства в замаскированном текстовом поле включают:

Маска: 00/00/0000 Тип проверки: DateTime TextMaskFormat: IncludeLiterals

Это то же самое, что я использовал маскированные текстовые поля в предыдущих приложениях, и тогда это работало, так почему бы и нет?

Кто-нибудь может заметить, что я делаю не так, пожалуйста?

1 Ответ

1 голос
/ 09 февраля 2012

Вот решение от MSDN:

    private void Form1_Load(object sender, EventArgs e)
{
    maskedTextBox1.Mask = "00/00/0000";
    maskedTextBox1.ValidatingType = typeof(System.DateTime);
    maskedTextBox1.TypeValidationCompleted += new TypeValidationEventHandler(maskedTextBox1_TypeValidationCompleted);
    maskedTextBox1.KeyDown += new KeyEventHandler(maskedTextBox1_KeyDown);

    toolTip1.IsBalloon = true;
}

void maskedTextBox1_TypeValidationCompleted(object sender, TypeValidationEventArgs e)
{
    if (!e.IsValidInput)
    {
        toolTip1.ToolTipTitle = "Invalid Date";
        toolTip1.Show("The data you supplied must be a valid date in the format mm/dd/yyyy.", maskedTextBox1, 0, -20, 5000);
    }
    else
    {
        //Now that the type has passed basic type validation, enforce more specific type rules.
        DateTime userDate = (DateTime)e.ReturnValue;
        if (userDate < DateTime.Now)
        {
            toolTip1.ToolTipTitle = "Invalid Date";
            toolTip1.Show("The date in this field must be greater than today's date.", maskedTextBox1, 0, -20, 5000);
            e.Cancel = true;
        }
    }
}

// Hide the tooltip if the user starts typing again before the five-second display limit on the tooltip expires.

void maskedTextBox1_KeyDown(object sender, KeyEventArgs e)
{
    toolTip1.Hide(maskedTextBox1);
}

ССЫЛКА: http://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.validatingtype.aspx

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