Событие загрузки Usercontrol не срабатывает
VB.net, против 2012 года
У меня есть форма (frmParts), в которой было слишком много элементов управления. Управлять им становилось все труднее. Последние пару дней я провел, разбивая его на несколько пользовательских элементов управления (каждый с 20-30 текстовыми полями, метками, переключателями и т. д.).
Вместо того чтобы перетаскивать копию каждого элемента UserControl в форму во время разработки, я делаю это в коде, когда загружается родительская форма.
Пользовательскими элементами управления являются ucPartsHeader, ucPartsSH, ucPartsTCD, ucPartsCH и ucPartsECD.
Когда ucPartsHeader добавляется в frmParts, срабатывает событие загрузки. Но когда добавляются другие 4, Их события загрузки не срабатывают. Я снова и снова перебирал код. Я не могу понять, что случилось. Я сделал переопределение событий загрузки, и это тоже не работает. Он просто никогда туда не попадет.
Кажется, что срабатывает весь код события предварительной загрузки (например, создание бар-менеджеров, адаптеров таблиц и т. д., которые находятся на каждом UserControl).
Каждый элемент управления UserControl имеет какую-либо публичную функцию называют pubfncLoadData.
Что я уже пробовал:
Вот мой код, который запускается в событии загрузки frmParts:
Dim sqlWhere As String = " WHERE PartID = " & Me.partID.ToString Me.pvtfncLoadData(sqlWhere) 'These 3 lines run perfectly and do what I expect them to do Dim ucPH As New ucPartsHeader Me.pnlHeader.Controls.Add(ucPH) ucPH.pubfncLoadData(sqlWhere) Dim ucSH As New ucPartsSH '<<< This line runs fine Me.pnlSH.Controls.Add(ucSH) '<<< This line seems to run fine but actually the Load event of ucPartsSH never fires ucSH.pubfncLoadData(sqlWhere) '<<< Then when it gets here, it crashes because it needs the Load event to run first 'The same is true for the next 3 blocks of code (they don't work right) Dim ucTCD As New ucPartsTCD Me.pnlTCD.Controls.Add(ucTCD) ucTCD.pubfncLoadData(sqlWhere) Dim ucCH As New ucPartsCH Me.pnlCH.Controls.Add(ucCH) ucCH.pubfncLoadData(sqlWhere) Dim ucECD As New ucPartsECD Me.pnlECD.Controls.Add(ucECD) ucECD.pubfncLoadData(sqlWhere)
Код события load для каждого из 5 элементы управления UserControl, практически идентичен. Но он просто не попадает туда даже для 4-х пользовательских элементов управления.
У меня есть блоки Try/Catch во всем этом, поэтому он публикует ошибки в файл журнала и продолжает работать. Форма будет создана, и появятся пользовательские элементы управления. Но в UserControls нет данных из-за того, что каждое из их событий загрузки не выполняется.
Я знаю, что кто-то захочет увидеть здесь гораздо больше кода, чтобы иметь возможность помочь. Я просто начинаю здесь сейчас, чтобы посмотреть, есть ли у кого-нибудь какое-либо представление о том, как я создаю и добавляю UserControls в основную форму. Поскольку все они почти одинаковы, я не понимаю, почему первый работает, а другие-нет. Я прокомментировал первый из них, чтобы посмотреть, позволит ли это работать второму. Но это не помогло. 2-й, 3-й, 4-й и 5-й вообще не работают, даже если первый закомментирован. Это мой первый раз, когда я использую UserControls, чтобы организовать вещи немного лучше. Может быть, я упускаю что-то очевидное.
Спасибо,
Один.