代码以解释用户控件中的自定义事件有人给了我这段代码,效果很好。但我真的很想了解其中发生了什么。有人可以解释一下吗?代码各部分的含义是什么?该代码位于自定义控件内,该控件在面板内有两个标签。另外,我已经看到一些使用添加/删除语法的自定义控件事件,这是为了什么?它与这里发生的事情有何不同?publicpartialclassUserControl1:UserControl{publicUserControl1(){InitializeComponent();}公共事件EventHandlerMyCustomClickEvent;protectedvirtualvoidOnMyCustomClickEvent(EventArgse){//在这里,您使用“this”,所以它是您自己的控件。您还可以//自定义EventArgs以传递您想要的内容。如果(MyCustomClickEvent!=null)MyCustomClickEvent(this,e);}privatevoidlabel1_Click(objectsender,EventArgse){OnMyCustomClickEvent(EventArgs.Empty);}}请参阅下面的评论。此外,对于更详细的事件,我在概念的博客上更详细地回顾了整个过程。publicpartialclassUserControl1:UserControl{//这是用户控件的标准构造函数publicUserControl1(){InitializeComponent();}//这定义了一个名为“MyCustomClickEvent”的事件,它是一个通用的//事件处理程序。(EventHander是一个委托定义,它定义了事件将共享哪些信息的契约。在这种情况下,EventArgs对象的一个??参数//。publiceventEventHandlerMyCustomClickEvent;//此方法用于引发事件,当应该引发事件时,//此方法将检查是否有任何订阅者,如果有,//它引发事件protectedvirtualvoidOnMyCustomClickEvent(EventArgse){//在这里,您使用“this"所以这是您自己的控件。您也可以//自定义EventArgs以传递您想要的内容。if(MyCustomClickEvent!=null)MyCustomClickEvent(this,e);}privatevoidlabel1_Click(objectsender,EventArgse){OnMyCustomClickEvent(EVentArgs.空);我建议阅读MSDN上的EventsonC#,其中详细介绍了这一点。基本上,MyCustomClickEvent是一个事件。OnMyCustomClickEvent方法用于引发事件,但如果需要,子类也可以引发此事件。单击“label1”时,将运行OnMyCustomClickEvent方法,从而引发事件。任何订阅该事件的委托都将在此时执行。您提到在一些自定义控件示例中看到了事件的添加/删除语法。这些示例很可能使用UserControl类的Events属性来存储事件处理程序,例如以下示例:publiceventEventHandlerMyEvent{add{Events.AddHandler("MyEvent",value);}移除{Events.RemoveHandler("MyEvent",value);想法通常是控件的使用者不想处理控件公开的每个事件。如果每个事件都定义为“字段”事件(如您的示例所示),那么即使该事件没有订阅者,每个事件也会占用一块内存。当您有一个包含数百个控件的复杂页面时,每个控件都可能包含数十个事件,未使用事件的内存消耗并非微不足道。这就是为什么System.ComponentModel.Component类(System.Windows.Forms.Control类的基类)有一个Events属性,它基本上是一个用于存储事件处理程序委托的字典。这样,每个事件的实现更像是一个属性而不是一个字段。添加/删除处理程序存储或从每个事件的事件字典中删除委托。如果未使用事件,则事件字典中没有条目,并且该事件不会消耗额外的内存。做一些工作(必须查找事件处理程序)以节省更多内存是一种权衡。编辑:修复了我使用Windows窗体而不是ASP.NET的答案,尽管概念是相同的。关于添加/删除,这是事件的“手动”实现。以下两个片段做同样的事情。自动执行:公共事件EventHandlerMyEvent;手动实现:privateEventHandler_myEvent;公共事件EventHandlerMyEvent{添加{_myEvent+=值;}删除{_myEvent-=值;这与自动属性完全相同,其中:publicstringProperty{get;放;};与:privatestring_property完全相同;publicstringProperty{get{return_property;}设置{_property=值;}}这些片段之间的区别在于,通过手动实现它们,您可以获得更多控制权。示例是:例如,Form类执行后者以保留Form类中的字段数。以上就是C#学习教程:详解用户控件自定义事件代码分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
