Я прошу прощения за пример C #, но я не могу вспомнить, как это сделать в VB ...
В любом случае, в вашем Init UserControl Init вы могли бы явно назначить свой метод Page_PreLoad в качестве обработчика события PreLoad свойства PageControl UserControl вместо использования синтаксиса «Handles» в объявлении метода. Ваш пример пытается назначить обработчик события для объекта UserControl для события, которое объект UserControl не вызывает. Как вы заметили, UserControl не наследуется от Page, где и происходит событие PreLoad. Однако UserControl содержит объект Page в качестве одного из его свойств, что, в свою очередь, представляет PreLoad как событие, которому вы можете назначить обработчик. В любом случае, это компилирует и приближает к тому, что звучит так, как вы ищете (используя комментарии в стиле C для сохранения подсветки синтаксиса ОМУ).
Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
// this assigns Page_PreLoad as the event handler
// for the PreLoad event of the Control's Page property
AddHandler Me.Page.PreLoad, AddressOf Page_PreLoad
MyBase.OnInit(e)
End Sub
Private Sub Page_PreLoad(ByVal sender As Object, ByVal e As System.EventArgs)
// do something here
End Sub
Я не уверен, служит ли это вашей цели - как указывал Стивен Райтон выше, может быть лучший способ с одним из различных событий в жизненном цикле страницы. Однако, основываясь на том, что он сказал, это должно работать, потому что вызывается OnInit элемента управления, в котором выполняется назначение обработчика события, затем вызывается событие OnLoad страницы, а затем выполняется обработчик события в элементе управления.