快速业务通道

用托管C++编写自定义Web组合控件

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
ell3 = new TableCell();
 cellLabel->Controls->Add(label);
 textbox->Width = Unit::Percentage(100);
 cell2->Controls->Add(textbox);
 cell3->Controls->Add(button);
 row->Cells->Add(cellLabel);
 row->Cells->Add(cell2);
 cell3->Width = Unit::Percentage(1);
 row->Cells->Add(cell3);
 table->Rows->Add(row);
 table->Width = Unit::Percentage(100);
 Controls->Add(table);
}

另外,别忘了在构造函数中创建labelCell的实例,要不然可要花点时间找出为什么设计器会给你一个大大的错误提示框了。

处理事件

现在,有关控件的外观已经全部完成,是时候对控件加入一点功能了。在此,你想做的第一件事,可能就是让按钮控件能处理单击事件了,我们在此使用一个事件处理函数,它就和普通的Windows与Web程序中的一样。以下是在单击事件中添加的事件处理函数:

button->Click += new EventHandler(this, buttonClicked);

接着,创建一个处理此事件的方法:

void SearchControl::buttonClicked(Object *sender, EventArgs *e)
{
 OnClick(e);
}

看到了吧,没有多深的科学道理,很简单。

引发事件

如果想让控件的用户访问到单击事件,那该怎么做呢?我们需要创建一个公共的__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应用程序。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号