我希望在用户控件生命周期的“预加载”阶段执行一些代码。但是预加载事件仅适用于 Page 对象。因此,我将以下方法添加到我的用户控件中:
Private Sub Page_PreLoad(ByVal sender As Object, ByVal e As System.EventArgs) Handles Page.PreLoad
但是,我知道会出现编译错误:“Handles 子句需要在包含类型或其基本类型之一中定义的 WithEvents 变量”
由于 Page 属性是从 UserControl 继承的,我不知道如何轻松完成此操作。
任何帮助感激不尽!
很抱歉给出了一个 C# 示例,但我不记得如何在 VB 中做到这一点...
无论如何,在 UserControl 的 Init 中,您可以显式指定 Page_PreLoad 方法作为 UserControl 的 Page 属性的 PreLoad 事件的处理程序,而不是在方法声明中使用“Handles”语法。您的示例所做的是尝试将事件处理程序分配给 UserControl 对象上的事件,以处理 UserControl 对象不会引发的事件。正如您所指出的,UserControl 并不继承自 Page,而 Page 是 PreLoad 事件所在的位置。不过,UserControl 确实包含 Page 对象作为其属性之一,该对象又将 PreLoad 公开为您可以向其分配处理程序的事件。无论如何,这会编译并接近您正在寻找的内容(使用 C 风格注释来保留 WMD 语法突出显示)。
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 事件,然后执行控件内的事件处理程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)