从其中一个模块调用用户控件中的方法



我创建了一个自定义用户控件,该控件在错误期间引发自身内部的事件,以传递给使用该用户控件的任何应用程序。我想通过调用用户控件本身中的方法,从用户控件代码中的模块引发这些相同的事件。我正在尝试做的一个例子是:

Public Class MyUserControl
Public Event MyErrorEvent(Ex as Exception)
Public Sub RaiseAnErrorSub(Ex as Exception)
RaiseEvent MyErrorEvent(Ex)
End Sub
End Class 

Public Module
Public Sub DoSomething()
'Performs an operation
'An Error could happen here
'Need to raise the usercontrol's event at this point....
RaiseAnErrorSub(Ex) 'How can this call the usercontrol of this module?
End Sub     
End Module

有没有办法调用用户控件的现有实例,从而调用它包含的方法?

我认为如果我们确切地知道用户控件的用途以及为什么需要处理异常,这个问题可能会更容易回答。但即使没有这些信息,这类问题的潜在解决方案也只有这么多,这取决于你希望它如何工作。


如果项目中有一个要引发事件的用户控件的特定实例,则需要具有对该实例的引用。由于您想从Module访问此实例,因此我建议在Module中创建一个字段来保存该引用。您可以添加以下内容:

Public UserControlInstance As [YourUserControlTypeHere]

由于这将在Module它会自动Shared(根据您的问题判断,这是您可能想要阅读的编程概念(。这允许从项目中的任何位置引用它,而无需使用实例。

您可能希望在创建用户控件时将该用户控件的实例设置为该实例UserControlInstance。例如,如果用户控件是WindowForm的一部分,则可以从该WindowForm的构造函数(Public Sub New(设置UserControlInstance


另一方面,如果您希望用户控件的任何和所有实例在调用RaiseAnErrorSub时引发事件,则可以同时RaiseAnErrorSubMyErrorEventShared,如下所示:

Public Shared Event MyErrorEvent(Ex as Exception)
Public Shared Sub RaiseAnErrorSub(Ex as Exception)
RaiseEvent MyErrorEvent(Ex)
End Sub

这样,您可以从项目中的任何位置调用RaiseAnErrorSub,并且用户控件的所有实例都将引发事件(无论如何,实际上是有效的(。

最新更新