C#学习教程:用户控件之间的ASP.NET事件委托(或某些通知)在冒泡到页面级别的TitleControl中。然后,我想(可选)在页面代码隐藏上注册一个事件处理程序,它将采用EventArgs并修改上面示例中的TabsControl。需要注意的重要一点是,这种设计允许我将这些控件放入任何页面,并在连接事件处理程序时让整个系统无缝工作。该解决方案不应涉及对FindControl()的调用,因为它会成为一个强关联。如果包含页面中没有定义任何处理程序,该事件仍会引发,但不会由TitleControl处理。我的基本目标是使用基于事件的编程,这样我就可以将用户控件彼此分离。TitleControl中的事件仅在特定情况下引发,这似乎是(在我看来)首选方式。但是,我似乎找不到一种干净的方法来做到这一点。这是我的(糟糕的)尝试:使用HttpContext.Current.Items将EventArgs添加到TitleControl上的Items集合,并在TabsControl上选择它。这可行,但从根本上难以破译,因为两个控件之间的联系并不明显。使用反射而不是传递事件,直接在TitleControl中查找容器页面上的函数,例如:Page.GetType().GetMethod("TabControlHandler").Invoke(Page,EventArgs);这将起作用,但方法名称必须是所有Page实例必须逐字定义的常量。我确定我想太多了,必须有一个使用委托的更漂亮的解决方案,但我似乎无法想到。有任何想法吗?为了使每个控件都可重用并与其他控件分离,我总是采用这种方法:每个容器都知道它包含一个深层次的控件,而不是包含它的容器。要进行交流,您使用事件是正确的。这为您提供了抽象层,并使您的所有控件都可重用。话虽这么说,让我们看看你的例子。您的TitleControl不包含任何内容,因此它所做的只是触发事件。您的HeaderControl引用您的TitleControl并处理它的事件。如果它没有完全处理您的TitleControl的事件,请让它声明并激发自己的事件,传递原始发送者和事件参数。在您的页面级别,您的页面将处理您的HeaderControl事件。由于你的页面也是TabsControl的容器,TabsControl在你的HeaderControl事件的事件处理器中调用了TabsControl的public方法,并传入了冒泡的EventArg信息。基本上,使用事件向上冒泡,使用公共方法或属性向下推。你想沿着这些方向做点什么吗?您可以让Page实现包含事件的接口。然后让选项卡控件查看页面是否实现了所需的界面。如果确实如此,则连接到事件。错过了关于标题控制的部分。标头控件还必须通过接口方法让页面知道它自己。然后您可以在某个时间点挂接一个事件(可能是一个加载事件)。这当然只适用于在加载事件之前添加到页面的控件。HeaderControl可以公开TabsControl使用的事件。我之前回答过类似的问题(附有示例项目)。以上就是《C#学习教程:ASP.NET用户控件之间的事件委托》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
