Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在复合Winforms控件中对外公开/冒泡事件?_C#_.net_Winforms_Events_Custom Controls - Fatal编程技术网

C# 如何在复合Winforms控件中对外公开/冒泡事件?

C# 如何在复合Winforms控件中对外公开/冒泡事件?,c#,.net,winforms,events,custom-controls,C#,.net,Winforms,Events,Custom Controls,我有一个带有3个按钮的CompositeControl,我不想让这些按钮成为我的CompositeControl中的公共成员。但我还想单独公开它们的单击事件,以便该控件的用户可以订阅它们 如果不复制控件中的相同事件并分别引发每个按钮的单击事件,我不知道如何执行此操作 如果不复制控件中的相同事件并分别引发每个按钮的单击事件,我不知道如何执行此操作 这确实是正确的处理方法。您将希望复制该事件,但请为其指定一个新的、正确的名称 通常,这意味着使用与按钮活动相关的名称(而不是按钮本身)公开“单击事件”。

我有一个带有3个按钮的
CompositeControl
,我不想让这些按钮成为我的
CompositeControl
中的公共成员。但我还想单独公开它们的单击事件,以便该控件的用户可以订阅它们

如果不复制控件中的相同事件并分别引发每个按钮的单击事件,我不知道如何执行此操作

如果不复制控件中的相同事件并分别引发每个按钮的单击事件,我不知道如何执行此操作

这确实是正确的处理方法。您将希望复制该事件,但请为其指定一个新的、正确的名称

通常,这意味着使用与按钮活动相关的名称(而不是按钮本身)公开“单击事件”。例如,如果您有一个刷新按钮,我会公开事件,如下所示:

public event EventHandler RefreshRequested;

然后,在内部,您将侦听按钮的click事件并引发请求刷新的事件。这也为您以后更改内部表示提供了灵活性(例如,如果您想使用按钮以外的内容)。

谢谢。我不知道如何将复合控件的主事件与内部事件连接起来。当用户订阅我的事件时,我会将同一事件分为内部事件?@JoanVenge最简单的方法就是始终订阅内部事件(即:在构造函数中),并将它们冒泡到主事件中。引发事件的标准事件处理将防止未处理的订阅服务器导致任何问题。。。