Записать значение Null / Nothing с привязкой данных - PullRequest
1 голос
/ 19 мая 2010

Я расширил компонент MaskedTextBox, чтобы добавить некоторые функции. Свойство text расширенного MaskedTextBox привязано к свойству DateTime?, а формат привязки установлен в формате времени «ЧЧ: мм: сс» (то есть время 24 часа). Так что это замаскированное текстовое поле будет захватывать время дисплея.

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

До этого все это прекрасно работало, значения записывались и отображались так, как и ожидалось.

Однако я также хочу записать значение null или nothing в свойство DateTime?, если пользователь не ввел текст (или неверный текст, но давайте просто придерживаться без текста), когда клавиша ввода нажмите, чтобы отправить новое значение.

В отличие от с другими действительными записями в MaskedTextBox, если у меня есть без ввода текста при выполнении:

        Me.DataBindings("Text").WriteValue()

(при блокировке MaskedTextBox) он переходит к связанным свойствам Get-метод, когда я вхожу в каждую строку кода в отладчике (в отличие от метода Set с другими действительными записями)

Как я могу записать это значение null / nothing / "" в свойство DateTime?, если в MaskedTextBox?

не введен текст ""

Спасибо за помощь!

1 Ответ

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

Чтобы манипулировать тем, какое значение отображается в связанном элементе управления и сохраняется в связанном свойстве, вам необходимо обработать события Format и Parse привязки. Ниже приведен упрощенный пример кода:

maskedTextBox1.DataBindings.Add("Text", bindobj, "Time");
maskedTextBox1.DataBindings[0].Parse += new ConvertEventHandler(Form1_Parse);
maskedTextBox1.DataBindings[0].Format += new ConvertEventHandler(Form1_Format);

void Form1_Format(object sender, ConvertEventArgs e)
{
    if (e.Value == null)
        e.Value = "Null";
}
private void Form1_Parse(object sender, ConvertEventArgs e)
{
    DateTime d;

    if (DateTime.TryParse(e.Value.ToString(), out d))
        e.Value = d;
    else
        e.Value = null;
 }
private void maskedTextBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
        maskedTextBox1.DataBindings[0].WriteValue();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...