У меня есть приложение WinForm, форма имеет TabControl, элемент управления имеет три вкладки tabPage1, tabPage2, tabPage3.
На вкладке TabPage3 находится пользовательский элемент управления, который имеет один или несколько дочерних элементов управления. Теперь моя проблема заключается в tabPage3, я знаю, что это чистое поведение Winforms, пока ваш родитель не активирует дочерние элементы управления. Событие Onload не срабатывает. У меня есть требование принудительно вызвать событие Onload, когда фокус находится на tabPage1, tabPage2. Есть ли способ принудительно запустить событие Onload.
Я уже посетил следующие ссылки, но не нашел подсказки. Ссылка на Link Link
Это очень необычное требование, сильно пахнет проблемой XY. Событие Load сильно переработано в Winforms, побочным эффектом которого является событие по умолчанию для формы или UserControl. Одним из поведений, унаследованных от VB6, событие Load было большой проблемой на этом языке. То, что вы хотите, может быть легко достигнуто, не предоставив Winforms выбор:
public UserControl3() {
InitializeComponent();
CreateHandle();
}
Вызов CreateHandle() вызывает принуждение, OnLoad будет немедленно запущен. Но имейте в виду, что это происходит очень рано, слишком рано делать то, что вы действительно хотите использовать OnLoad() или событие загрузки для. Что довольно ограничено, действительно необходимо найти фактическое местоположение и размер элемента управления. Все остальное принадлежит конструктору. Конечно, включая код, который вы теперь используете в OnLoad().
Сильно пользуйтесь вместо этого конструктором.
У меня была аналогичная проблема для предыдущего проекта, для моих нужд мне удалось просто перебрать каждую вкладку в конструкторе форм (или, возможно, OnLoad, которую я не помню), а затем вернуть индекс обратно до 0, прежде чем показывать конечного пользователя,
Что-то подобное:
for(int i = 1; i < tabControl.TabCount; i++)
tabControl.SelectTab(i);
tabControl.SelectTab(0);
SelectTab(2)
)
UserControl
вProgram.cs
и получать к нему доступ в любое время.