ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl
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的属性,还是看看 效果图: 改前的图: 改后的图
就是说,我们想把子控件的属性如Text,name等等,把这些属性上升呈现为组合控件Login的属性。 怎么做? 也很简单的:如下: 1 public string UserNameLabelText 这样我们就把那个显示用户名的Label的Text属性显示为了Login控件的UserNameLabelText属性。大家 要注意EnsureChildControls(); 这个方法的调用。其实是个保险的:确保我们要显示属性的那个控件已 经创建,已经初始化了。 大家可以根据需要显示更加多的属性。也可以自己定义一些属性,还是像以前那样,可以用 ViewState[''''.."] 如果到这里为止,就差不多了。大家可以按按照上面的方法来写控件。 大家可以看见,控件的呈现很乱。那些Label.TextBox都布局的很乱。其实你可以根据需要来将上面的 那些控件排列的更加好看些,只要重写一个方法就行了:
还是像之前一样,我们想把控件用一个Table来布局,先这样 1 protected override HtmlTextWriterTag TagKey 然后再把那些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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |