2010-09-08 146 views
1

我有一个自定义控件,我们将称之为“TheGrid”。自定义控件上的自定义事件

在TheGrid的控件中是另一个我们称之为“GridMenu”的控件。

GridMenu在其自己的控件集合中有一个按钮控件。

我想使用这个控制,以使开发者页面级方法与按钮的OnClick GridMenu ALA内心深处的关联:

<customcontrols:TheGrid id="tehGridz" runat="server" onGridMenuButtonClick="mypagemethod" /> 

回答

4

在GridMenu(我以为是另一个自定义控制),公开由它声明为公共ButtonClick事件:

public event EventHandler ButtonClick; 

如果您愿意,您可以通过定义委托和自定义事件参数类来创建自定义事件处理程序。在这个控制逻辑的某个地方,您需要引发事件(可能在GridMenu上包含的按钮的Clicked事件处理程序中;事件可以级联)。使用C#进行编码时,在引发事件之前,您需要检查事件是否为空(意味着至少有一个处理程序已连接)。

现在,此事件对TheGrid可见,其中包含GridMenu。现在您需要创建一个“传递”来允许TheGrid的用户附加处理程序,而无需了解GridMenu。您可以通过指定TheGrid类似的属性,并附加从内部事件分离处理的事件做到这一点:

public event EventHandler GridMenuButtonClick 
{ 
    add{ GridMenu.ButtonClick += value;} 
    remove { GridMenu.ButtonClick -= value;} 
} 

从含有TheGrid控制的控制的标记,你现在可以指定事件处理程序通过将它附加到OnGridMenuButtonClicked你想要的方式。

+0

我假设这样的事情是采取的方法,但无论我做什么,我都无法获得识别OnGridMenuButtonClicked的智能。 – 2010-09-08 16:01:06

+0

@ D.Forrest:您必须使用GridMenuButtonClick而不是OnGridMenuButtonClicked – SKINDER 2010-09-08 16:05:30

+0

当然,我明白了。实际上我打电话给我的事件“OnSearchClick”。但是,在添加/删除声明的调试中,通过标记和断点绝对不可见。 – 2010-09-08 16:14:18