快速业务通道

ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
Button.CommandName = "Validate"; 39 Controls.Add(submitButton); 40 41 告诉编译器,控件已经初始化了 42 ChildControlsCreated = true; 43 } 44 #endregion

大家特别要注意,最后的那句ChildControlsCreated属性,一定要申明,因为在页面的声明周期的任 何时候可能调用上面的那个方法,如果不申明ChildControlsCreated,那么这个方法就会被反复的调用, 那么我们控件的状态都会丢失。

如果申明了ChildControlsCreated=true,那么这个方法就调用一次。

经过上面的步骤之后,其实我们的控件就已经开发完成了。

可能我们还想进一步的向我们ASP.NET的标准的Login控件靠拢.那么我们的控件还缺少什么?

属性,事件!!!

以前我们定义属性都是用的ViewState["..."],但是这里就不同了。因为我们的控件是有很多的小的 控件组合起来的,比如,我们修改“用户名:”的那个Label,我们想改的是那个Label的属性,还是看看 效果图:

改前的图:                            改后的图

ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

就是说,我们想把子控件的属性如Text,name等等,把这些属性上升呈现为组合控件Login的属性。

怎么做?

也很简单的:如下:

1  public string UserNameLabelText
2 {
3 get
4 {
5 EnsureChildControls();
6 return lbUserName.Text;
7 }
8 set
9 {
10 EnsureChildControls();
11 lbUserName.Text = value;
12 }
13 }

这样我们就把那个显示用户名的Label的Text属性显示为了Login控件的UserNameLabelText属性。大家 要注意EnsureChildControls(); 这个方法的调用。其实是个保险的:确保我们要显示属性的那个控件已 经创建,已经初始化了。

大家可以根据需要显示更加多的属性。也可以自己定义一些属性,还是像以前那样,可以用 ViewState[''''.."]

如果到这里为止,就差不多了。大家可以按按照上面的方法来写控件。

大家可以看见,控件的呈现很乱。那些Label.TextBox都布局的很乱。其实你可以根据需要来将上面的 那些控件排列的更加好看些,只要重写一个方法就行了:

1 protected override void RenderContents(HtmlTextWriter writer)

还是像之前一样,我们想把控件用一个Table来布局,先这样

1  protected override HtmlTextWriterTag TagKey
2 {
3 get
4 {
5 return HtmlTextWriterTag.Table;
6 }
7 }

然后再把那些Label,TextBox,Button放到table的行和列中就行了。如下:

1 protected override void RenderContents(HtmlTextWriter writer)
 2         {
 3
 4             writer.RenderBeginTag(HtmlTextWriterTag.Tr);
 5
 6             writer.RenderBeginTag(HtmlTextWriterTag.Td);
 7             lbUserName.RenderControl(writer);
 8             writer.RenderEndTag();//td的结束
 9
10             writer.RenderBeginTag(HtmlTextWriterTag.Td);
11             txtUserName.RenderControl(writer);
12             writer.RenderBeginTag();
13
14             writer.RenderBeginTag();//tr的结束
15
16             //***********************************************
17
18             writer.RenderBeginTag(HtmlTextWriterTag.Tr);
19
20             writer.RenderBeginTag(HtmlTextWriterTag.Td);
21             lbUserPassward .RenderControl(writer);

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

分享到: 更多
href="http://www.lingzhong.cn/tech/39453.htm" title="iBATIS 3内的新特性:将iBATIS用作应用程序内的一种持久框架 - 编程入门网" target="_blank">iBATIS 3内的新特性:将iBATIS用作应用程序内的一种持久框架 - 编程入门网
  • Photoshop绘制高光水晶质感水晶苹果
  • 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号