我创建了一个自定义用户控件,该控件会在错误期间引发自身事件,以将错误传递给使用该用户控件的任何应用程序。我想通过调用用户控件本身内的方法,从用户控件代码内的模块引发这些相同的事件。我尝试做的一个例子是:
public static <T, A, R> Collector<T, ?, R> filtering(
Predicate<? super T> predicate, Collector<? super T, A, R> downstream) {
BiConsumer<A, ? super T> accumulator = downstream.accumulator();
return Collector.of(downstream.supplier(),
(r, t) -> { if(predicate.test(t)) accumulator.accept(r, t); },
downstream.combiner(), downstream.finisher(),
downstream.characteristics().toArray(new Collector.Characteristics[0]));
}
myList.stream().collect(Collectors.groupingBy(MyObject::getField1, filtering(distinctByKey(MyObject::getField2), Collectors.counting())));
有没有一种方法可以调用用户控件的现有实例,从而包含其中的方法?
答案 0 :(得分:1)
如果我们确切知道用户控件的用途以及为什么需要处理异常,我认为这个问题可能会更容易回答。但是,即使没有这些信息,也只能根据您希望其工作的方式来解决这类问题。
如果您要在项目中的项目中有一个用户控件的特定实例,则需要对该实例进行引用。由于您想从Module
访问此实例,因此建议您在Module
中创建一个字段来保存该引用。您可以添加以下内容:
Public UserControlInstance As [YourUserControlTypeHere]
因为它会放在Module
中,所以它会自动Shared
(根据您的问题判断,这可能是您可能需要阅读的编程概念)。这样就可以在项目中的任何地方引用它,而无需使用实例。
创建用户控件时,您想将UserControlInstance
设置为该用户控件的实例。例如,如果您的用户控件是Window
或Form
的一部分,则可以从该UserControlInstance
或{{1的构造函数(Public Sub New
)中设置Window
}}。
另一方面,如果您希望用户控件的任何实例在每次调用Form
时引发事件,则可以同时创建RaiseAnErrorSub
和{{ 1}} RaiseAnErrorSub
,如下所示:
MyErrorEvent
这样,您可以从项目中的任何地方调用Shared
,并且所有用户控件实例都会引发事件(无论如何有效)。