标题:用托管C++编写自定义Web组合控件(3)
时间:2006-7-31 来源:酷网动力 浏览数:次
引发事件
如果想让控件的用户访问到单击事件,那该怎么做呢?我们需要创建一个公共的__event,在此之上,用户可提供他们自己的事件处理函数:
__event EventHandler* Click;
或许,你还想提供一个受保护的OnClick()方法,这样,如果有人从SearchControl继承,在传回控件给SearchControl自定义Web组合控件之前或之后,他可为单击事件提供一些额外的功能。另外,如果你很专心,那一定注意到了buttonClick()事件处理函数实际上是调用了OnClick()方法,由其把控件从按钮传递到任意事件处理函数,而事件处理函数则可被附加于控件的单击事件之上。
void SearchControl::OnClick(EventArgs *e)
{
if (Click != 0)
Click(this, e);
}
因为单击事件是默认也是唯一的事件,也许,再添加一个DefaultEvent("Click")属性,指定单击为控件的默认事件,会是一个不错的主意:
[DefaultProperty("Value"), DefaultEvent("Click"),
ToolboxData("<{0}:SearchControl
runat=server></{0}:SearchControl>")]
public __gc class SearchControl :
public System::Web::UI::WebControls::WebControl
{}
请记住,如果你修改了元数据(属性),那必须删除并重新引用程序集,以便元数据可被重新识别。一般而言,如果要使用此控件,只需在设计器中双击SearchControl控件,以创建一个事件处理函数。(下面假定使用者的代码为C#代码):
private void SearchControl1_Click(object sender, System.EventArgs e)
{
WebCustomControl1.Text = SearchControl1.Value;
}
在本文结束时,作一下简单的小结,在托管C++中开发自定义Web控件,涉及了一些比较有意思的事情:首先,它创建了一个由四个服务端控件所组成的自定义Web组合控件,并演示了怎样使用属性来操作控件;其次,还说明了怎样处理由控件产生的事件;最后,演示了怎样传递事件给使用自定义组合控件的Web应用程序。
(责任编辑:笑虎)