Как получить доступ к значению элемента управления на неотображаемой вкладке для проверки? - PullRequest
1 голос
/ 24 апреля 2009

Я создал диалог, который содержит 3 вкладки. Элементы управления на вкладках 1 и 2 проходят проверку с использованием события Validating(). Пользователь будет в основном работать на вкладках 1 и 3, никогда не отображая вкладку 2 без необходимости. Все элементы управления на вкладках 1 и 2 связаны с объектом BindingSource.

По моим наблюдениям, связанные элементы управления не инициализируются на вкладке 2, пока вкладка не отобразится. В результате проверка всей формы завершается неудачей, поскольку эти элементы управления не имеют значения. Значение TextBox.Text равно "" при первом вызове Validating() и somevalue после просмотра вкладки.

Я попытался «предварительно инициализировать» элементы управления на вкладке 2 из события Load (например, TextBox.Value = 'test';), но обнаружил, что значение было очищено до вызова Validating ().

У меня были мысли о проверке значения из BindingSource.Current, но у этого конкретного решения есть несколько ловушек, особенно BindingSource, содержащий непроверенное значение.

Какие шаги мне нужно предпринять, чтобы:

  • инициализировать элементы управления перед их отображением
  • получить правильное значение (control или BindingSource) для Validation()

Ответы [ 2 ]

0 голосов
/ 30 апреля 2009

Хотя я не смог найти никаких достоверных источников для подтверждения, похоже, что связанные элементы управления не инициализируются до тех пор, пока они не станут видимыми. Мне удалось подтвердить подобное поведение на моей вкладке, отображаемой по умолчанию, скрыв текстовое поле. Значение элемента управления .Text составляло "" до тех пор, пока элемент управления не стал видимым, после чего значение было заполнено моим ожидаемым значением.

A вопрос на форумах Microsoft дополнительно подтвердил то, что я испытывал:

Так работает привязка данных .NET: привязка не работает, пока элемент управления не станет видимым. ... Для временного отображения элемента управления нет обходного пути.

0 голосов
/ 27 апреля 2009

Я решил эту проблему, программно переключившись на Tab2 и затем переключившись обратно на Tab1

        foreach (TabPage tab in tabControl.TabPages)
        {
            tab.Visible = true;
        }
        tabControl.SelectedIndex = 0;
...