【发布时间】:2013-11-14 19:53:29
【问题描述】:
我们可以在不创建对象实例的情况下将事件处理程序动态附加到类吗?
我的场景
从主窗体 [Level 0] 我正在调用子窗体 [Level 1],我可以从主窗体向这些子窗体添加动态事件。但是从子表单中,我再次调用表单 [级别 2]。我无法从此级别 [级别 2] 添加动态事件。我不知道什么时候从Level 1 调用了一个表单,它一定是按钮点击事件或任何其他事件。
下面的代码不起作用,因为它需要一个实例,这里 frm 是一个实例
Dim frmLoad = New FormLoadEventHandler(AddressOf On_Load)
t.GetEvent("Load").AddEventHandler(frm, frmLoad)
我正在将单个程序集加载到单个平台中,因此每个单独的程序集都有很多子表单,我可以从我的主模块通过反射访问初始表单。我的想法是使从我的平台调用的所有形式的字体都相同
【问题讨论】:
-
我可能遗漏了一些东西,但这对我来说没有意义......如果没有表单的实例,就不会引发任何事件。您的意思是没有对实例的 reference 吗?如果是这样,那么答案是否定的 - 但它很容易解决 - 只需通过您的代码将相关引用传递到需要的位置(将
l2frm传递到l0frm或反之亦然) -
我正在将单个程序集加载到单个平台中,因此每个单独的程序集都有很多来自我的主模块的子表单,我可以通过反射访问初始表单。我的想法是使从我的平台调用的所有形式的字体都相同
-
这听起来不像是一个干净的架构。 “单一平台”是什么意思?单个 AppDomain/进程/???如果您可以控制程序集,则不需要反射(99% 的时间)。如果您无法控制,更改字体可能会导致问题(文本溢出时会发生什么情况?)。反射仅在您处理未知类型时才有用 - 您的类型未知是否有充分的理由?
标签: .net winforms events dynamic instance