- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 ASP.NET 页面上提供以下控件层次结构:
我试图在 TitleControl 中引发一个事件(或一些通知),该事件冒泡到 Page
级别。然后,我想(可选)注册一个事件处理程序在页面代码隐藏,它将采用 EventArgs
并修改上面示例中的 TabsControl。需要注意的重要一点是,如果连接了事件处理程序,这种设计将允许我将这些控件放入任何页面并使整个系统无缝工作。该解决方案不应涉及对 FindControl()
的调用,因为这会成为一个强关联。如果包含页面中没有定义任何处理程序,TitleControl 仍会引发该事件,但不会对其进行处理。
我的基本目标是使用基于事件的编程,这样我就可以将用户控件彼此分离。来自 TitleControl 的事件仅在某些情况下引发,这似乎是(在我看来)首选方法。但是,我似乎无法找到一种方法来彻底实现这一目标。
这是我的(糟糕的)尝试:
使用 HttpContext.Current.Items
Add the EventArgs to the Items collection on TitleControl and pick it up on the TabsControl. This works but it's fundamentally hard to decipher since the connection between the two controls is not obvious.
使用反射
Instead of passing events, look for a function on the container Page directly within TitleControl as in:
Page.GetType().GetMethod("TabControlHandler").Invoke(Page, EventArgs);
This will work, but the method name will have to be a constant that allPage
instances will have to defined verbatim.
我敢肯定我想多了,肯定有一个使用委托(delegate)的更漂亮的解决方案,但我似乎想不出。有什么想法吗?
最佳答案
为了使每个控件都可重用并与其他控件分离,我一直采用这种方法:每个容器都知道它包含一个深层次的控件,但不知道包含它的容器。向上沟通,你使用事件是正确的。这为您提供了抽象层,并使您的所有控件都可重用。
话虽这么说,让我们来看看你的例子。您的 TitleControl
不包含任何内容,因此它只会触发事件。
您的 HeaderControl
引用您的 TitleControl
并处理它的事件。如果它不能完全处理您的 TitleControl
事件,那么让它声明并触发它自己的事件,并传递原始发送者和事件参数。
在您的页面级别,您的页面将处理您的 HeaderControl
事件。由于您的页面也是 TabsControl
的容器,因此在 HeaderControl
事件的事件处理程序内调用 TabsControl
中的公共(public)方法,然后传入冒泡的 EventArg 信息。
基本上,使用事件将事物冒泡,并使用公共(public)方法或属性将事物压低。
关于c# - 用户控件之间的 ASP.NET 事件委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2550283/
我看了很多文章,但我仍然不清楚我们通常创建的普通委托(delegate)和多播委托(delegate)之间的区别。 public delegate void MyMethodHandler(objec
考虑以下几点: Action a1 = new Action(_insert); Action a2 = new Action(a1); a2 指的是什么?它是 a1,a1 的浅拷贝还是 a1 的深拷
我希望这听起来像是一个显而易见的问题,但是委托(delegate)返回类型是否也必须与其委托(delegate)的方法的返回类型相匹配? EG,像这样: public static void Save
我想使用 Kotlin 委托(delegate),但我不想在委托(delegate)人之外创建委托(delegate)。委托(delegate)的所有示例都如下所示: interface Worker
class SuperClass { var delegate : SuperClassDelegate? } protocol SuperClassDelegate { func d
我有一个加载 View 的 View ,需要将 View 推送到主导航 Controller 。 我已经为每个 View 设置了一个委托(delegate),并且基本上使我的调用沿着“链”返回到主导航
为简单起见,假设我想创建一个自定义 UITextField 并向其添加一个简单的行为;也就是说,如果文本字段成为第一响应者,背景颜色将变为绿色。 为此,在我的自定义类中,我必须将该类设置为委托(del
我非常有信心我应该能够使用非静态方法的委托(delegate),但下面给了我一个错误: public class TestClass { private delegate void TestD
在 C# 中不能从 System.Delegate 或 System.MulticastDelegate 继承。只要您声明标准的“运行时托管”方法,就完全可以在 MSIL 中执行此操作。但是,每次我向
我在 Storyboard 中定义了一个 iPad 界面,带有一个 SplitViewController。我想将 SplitViewController 的委托(delegate)设置为指向详细 C
我有几个解析器。有一个顶级的可以委托(delegate)给另一个。 Parser我们从 Reader 中获取他们的输入(可变)。我只想要一个 Parser为了能够一次解析,只有一个解析器应该有 Rea
一直以来我都在阅读关于反射的文章,每个人都在说:“反射很慢”,“反射很慢”。 现在我决定测试速度有多慢,令我惊讶的是,使用反射创建的委托(delegate)实际上是使用 lambda 创建的委托(de
在 Xcode 4.5 中启动了 Cocos2D 2.1 模板(没有物理引擎),针对 iOS 6 和 iPad。在 CDAudioManager.m 文件中,以下代码... AVAudioSessio
以下是来自未管理的 dll 的函数代码。它接受一个函数指针作为参数,并简单地返回被调用函数返回的值。 extern __declspec(dllexport) int _stdcall callDe
//NewCharts.h #import @interface NewCharts : UIViewController @property(nonatomic,retain)IBOutlet U
鉴于以下 MSDN 示例代码,为什么我不能定义 Action 委托(delegate)“内联”: public static void Main(string[] args) { Action
在虚幻引擎中,UFUNCTION用于通过附加说明符来丰富功能,以用于蓝图使用、复制和委托(delegate)。 然而,一些委托(delegate)类型似乎不允许绑定(bind) UFUNCTION(如
我刚刚将照片选择器放入我的项目中,一切正常。唯一的事情是它坚持在我设置委托(delegate)的地方给我以下警告 - Assigning to 'id' from incompatible type
我有一个 UIImageView 的子类,并且想将 self 作为参数传递给委托(delegate)。我在 MyImageView 之前收到错误“预期 ')'”。我需要将对象传递给委托(delegat
我正在开发 iOS 10 的语音转文本功能。 我希望调用 SFSpeechRecognitionTaskDelegate 的委托(delegate)方法来检查完成的结果。 func speechRec
我是一名优秀的程序员,十分优秀!