Невозможно выйти из пустого текстового поля с привязкой к данным - PullRequest
0 голосов
/ 12 октября 2018

Я создаю приложение базы данных Entity Framework (C #, SQL Server).Я использую поля текстового поля для нескольких дат, которые являются необязательными (DataTime? - обнуляемый).У меня есть проверяющие обработчики, которые отклоняют записи, которые не могут быть проанализированы как даты (DateTime.TryParse), но будут принимать пустые записи.Проблема в том, что если оставить поле пустым, поле текстового поля не позволит сместить фокус.Это происходит, даже если проверяющий обработчик утвердил его (e.cancel = false).Подтвержденное событие не срабатывает.Я не могу найти, откуда происходит эта недействительность за кулисами.

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

Дополнительная информация- Пользователь может проходить через эти поля (TAB) без остановки, если они не «касаются» их.В этом сценарии запускаются как события Validating, так и Validated.Однако, если какой-либо текст введен в поле (а затем удален), пользователь не может выйти из поля без ввода правильной даты.Событие Validating возникает, но не событие Validated.Никаких исключений не выдается, и никакие другие отзывы не предоставляются, пользователь просто застрял.

Дополнительная информация. Я обнаружил в форме свойство «AutoValidate» и попытался установить для него значение EnableAllowFocusChange;это позволяет пользователю выйти из пустого поля, но также позволяет ему выйти с неверной записью даты.Он также является глобальным для всей формы, что делает его неприемлемым (не) решением.

Откуда исходит эта скрытая первостепенная инвалидность и как я могу перехватить / отменить / победить ее?

MyКод проверки был запрошен:

    private void txb_ReleaseDate_Validating(object sender, CancelEventArgs e)
    {
        if (!EditMode["EmployeeRecord"]) return;              // NOT editing EmployeeRecord

        TextBox dataField = (TextBox)sender;
        Boolean isValid = true;

        DateTime testValue;


        if (!String.IsNullOrEmpty(dataField.Text))                   //  null is acceptable
        {
            isValid = DateTime.TryParse(dataField.Text, out testValue);

            if (!isValid)
            {
                MessageBox.Show("Enter a valid Date for Release, or leave BLANK.", "Invalid Entry", MessageBoxButtons.OK);
                e.Cancel = true;        
            }

        }

    }

    private void txb_ReleaseDate_Validated(object sender, EventArgs e)
    {
        MessageBox.Show("Validated Handler (Release Date) fired");

    }

Как я уже говорил, этот код выполняется как задумано.«Проверенный» код предназначен только для целей трассировки, и мне не нужно предпринимать никаких действий.

Что-то отменяет проверку записи после проверяющего кода, который был запущен и утвердил его..

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