用户控制中来自其模块之一的调用方法

时间:2019-10-12 18:41:54

标签: vb.net user-controls

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

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())));

有没有一种方法可以调用用户控件的现有实例,从而包含其中的方法?

1 个答案:

答案 0 :(得分:1)

如果我们确切知道用​​户控件的用途以及为什么需要处理异常,我认为这个问题可能会更容易回答。但是,即使没有这些信息,也只能根据您希望其工作的方式来解决这类问题。


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

Public UserControlInstance As [YourUserControlTypeHere]

因为它会放在Module中,所以它会自动Shared(根据您的问题判断,这可能是您可能需要阅读的编程概念)。这样就可以在项目中的任何地方引用它,而无需使用实例。

创建用户控件时,您想将UserControlInstance设置为该用户控件的实例。例如,如果您的用户控件是WindowForm的一部分,则可以从该UserControlInstance或{{1的构造函数(Public Sub New)中设置Window }}。


另一方面,如果您希望用户控件的任何实例在每次调用Form时引发事件,则可以同时创建RaiseAnErrorSub和{{ 1}} RaiseAnErrorSub,如下所示:

MyErrorEvent

这样,您可以从项目中的任何地方调用Shared,并且所有用户控件实例都会引发事件(无论如何有效)。