All
У меня есть TabControl в приложении, которое стало странно себя вести. Немного предыстории ...
Эта программа была преобразована из VB6 в VB .NET 2008 и использовалась для обращения к формам с использованием имен их классов. Другими словами, у меня может быть класс формы с именем frmFoo. В коде программы вы можете увидеть:
frmFoo.Show()
или
frmFoo.UserDefinedProperty = True
Во время некоторых недавних изменений я создал переменные для представления экземпляров моих форм, наподобие этих:
Public MyForm as frmFoo
MyForm = New frmFoo
MyForm.Show()
При этом я также удалил код из обработчика события Load формы и поместил его в конструктор формы.
Когда форма загружается или когда документ загружается и должен влиять на выбранный индекс TabControl, что-то вроде следующего не обязательно вызовет событие SelectedIndexChanged.
MyForm.tbsForm.SelectedIndex = ValueReadFromFile
... или ...
MyForm.tbsForm.Tabs(ValueReadFromFile).Select
Извините, что так многословен, но есть и другое. Если я открою форму и посмотрю на TabControl, чтобы убедиться, что он установлен правильно, все работает так, как должно. Неправильное поведение TabControl содержится в другом TabControl, поэтому я должен щелкнуть родительский TabControl, чтобы увидеть его. Если я вижу его и запускаю тест, тест всегда работает. Если я не вижу его и запускаю тест, то первый тест, который я запускаю, не вызовет событие. ... пейджинг доктора Гейзенберга ...
Это похоже на то, как если бы сначала нужно было инициализировать элемент управления, изменив значение или сделав его видимым на экране ... Я полностью потерян на этом. Это самое необычное поведение, которое я когда-либо видел. И все работало отлично, прежде чем я начал использовать переменные для представления форм и поместил код события Load в конструкторы форм.
Может кто-нибудь помочь или хотя бы избавить меня от моих страданий?
SH
----------------------------------------------- --------------- Редактировать # 2
Я только что выполнил тест после попытки устранить некоторые изменения в поведении. Но я хотел подтвердить ранее заявленное поведение.
Я открыл программу и прочитал файл. Этот файл содержал значение, которое должно было вызвать обработчик события. Не делая элемент управления видимым, я могу изменить свойство SelectedIndex элемента управления вкладкой без запуска события.
Я снова закрыл программу и снова открыл ее. На этот раз выбрал родительскую вкладку, которая позволяла видеть дочернюю вкладку (ту, событие которой меня интересует). Затем я выбрал другую вкладку в родительском элементе управления, что означает, что дочерний элемент управления больше не был виден. Когда я открыл тот же файл, что и раньше, это вызвало событие.
Я испытываю желание реализовать флаг, который подтверждает, что элемент управления был перекрашен или была отображена родительская вкладка. Возможно, мне придется запустить событие в коде, если флаг не установлен.
Я хочу повторить, что все работало, когда программа ссылалась на формы по именам классов, и большая часть расположения элементов управления на формах была выполнена в событии load. Теперь программа создает переменные, а расположение элементов управления выполняется в конструкторе формы. Я уверен, что это как-то связано с моей проблемой, но я не могу понять как. Любой мудростью поделиться?