Нужно ли показывать каждую вкладку до того, как все текстовые поля заполнятся? - PullRequest
0 голосов
/ 01 мая 2018

У меня есть форма vb.net, которая использует несколько текстовых полей на нескольких разных вкладках. В одной из этих вкладок у меня есть поднабор вкладок. Моя функция сохранения вызывает хранимые процедуры для каждой вкладки и циклически перебирает значения на каждой странице для обновления или добавления нового. Я заметил, что во время тестирования некоторые страницы не сохраняют и не обновляют значения в текстовых полях. После нескольких дней изучения я понял, что если я что-то редактирую, то физически нажимаю на другие вкладки, все это сохраняет / обновляет правильно. Если я не нажму на них, они не все сохранят. Есть ли причина для этого, что я пропускаю? Когда вы вводите поисковое значение, я перебираю страницы и заполняю их все одновременно, поэтому я предполагал, что они записали эти значения ДО того, как они физически отобразятся ... Наверное, я не прав?

1 Ответ

0 голосов
/ 01 мая 2018

Из раздела примечаний документации TabPage

Элементы управления, содержащиеся в TabPage, не создаются до тех пор, пока не отображается страница вкладки, и любые привязки данных в этих элементах управления не активируются, пока не отобразится страница вкладки.

Таким образом, ответ на ваш вопрос «Да, вкладка должна быть показана».

Однако определение «показанный» подлежит толкованию. На самом деле все, что вам нужно сделать, установить для свойства TabPage.Visible значение True, а не циклически проходить и отображать каждое TabPage.

Будет работать рекурсивное сканирование формы для TabPage элементов управления:

Private Shared Sub TabPagesVisible(parent As Control)
    For Each c As Control In parent.Controls
        If TypeOf c Is TabPage Then c.Visible = True
        TabPagesVisible(c)
    Next
End Sub

Пример использования:

Sub SaveFormTabData()
    TabPagesVisible(Me) ' Me refers to the containing form
    ' code to save control data
End Sub
...