快速业务通道

ASP.NET自定义控件组件开发 第五章 模板控件开发

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20

大家好,我们今天来开发一个模板控件。

其实开发一个模板控件比开发一个组合控件更加简单,所以这章不难。

开发一个模板控件一般都继承CompositeControl,因为继承这个基类后,我们就省却了很多的麻烦。 所以本章我们开发的模板控件也继承于CompositeControl。大家应该还记得我们上章开发那个登录Login 控件吧,如下:

ASP.NET自定义控件组件开发 第五章 模板控件开发

以上就是我们之前开发的登录控件,现在我们来改造它。我们的现在的这个登录控件的输入用户名和 密码的控件是TextBox,我们有时候可能想把TextBox 换成DropdownList,或者其他的控件。也就说,我们 想定制这个登录的控件。那么,我们就要模板了。

首先来看看我们本章实现控件的最后效果:

ASP.NET自定义控件组件开发 第五章 模板控件开发

ASP.NET自定义控件组件开发 第五章 模板控件开发

ASP.NET自定义控件组件开发 第五章 模板控件开发

大家看见没,这样我们就可以定制这个控件了。好了,我们来实现吧。

首先,我们让我们的模板控件继承上章的那个组合的Login控件:

Code

1 public class TemplateLoginControl:Login

然后,我们就声明我们的模板:

Code

1 #region//声明模板
2     private ITemplate loginUserNameTemplate;
3
4     [Browsable (false )]//我们不想在属性窗口中看见它
5     [TemplateContainer (typeof(TemplateLoginControl ))]//我们的模板是包含在找个控 件中的,
6     [PersistenceMode (PersistenceMode.InnerProperty )]//模板中内容很复杂的 ,比如你可以拖入很多的控件
7     public ITemplate LoginUserNameTemplate
8     {
9       get
10       {
11         return loginUserNameTemplate;
12       }
13       set
14       {
15          loginUserNameTemplate = value;
16       }
17
18     }
19
20     private ITemplate loginUserPasswardTemplate;
21     [Browsable (false)]//我们不想在属性窗口中看见它
22     [TemplateContainer(typeof (TemplateLoginControl))]//我们的模板是包含在找个控件中的,
23     [PersistenceMode (PersistenceMode.InnerProperty)]//模板中内容很复杂的,比如你可以拖入很多的控件
24     public ITemplate LoginUserPasswardTemplate
25     {
26       get
27        {
28         return loginUserPasswardTemplate;
29       }
30        set
31       {
32         loginUserPasswardTemplate = value;
33       }
34     }
35     #endregion

正如前面所说的,我们只是想定制两个输入信息的模板,大家可以根据需要,声明更多的模板。如, 大家还可以把显示的用户名的那些Label换成模板定制。

其实编写模板控件比编写一个组合控件更加的简单。大家稍后就可以体会到了。

好了,声明完了模板之后,我们的控件写了一大半了,还差一点。大家想想是什么???

对了,就是应用这些模板了。如下:

Code

1  protected override void CreateChildControls()
 2         {
 3             Controls.Clear();
 4             if (loginUserNameTemplate != null)
 5                 loginUserNameTemplate.InstantiateIn(this);
 6             else
 7                 base.CreateChildControls();
 8             if(loginUserPasswardTemplate!=null )
 9                 loginUserPasswardTemplate .InstantiateIn(this);
10             else
11                 base.CreateChildControls();
12
13             ChildControlsCreated = true;
14
15
16         }

我想,大家对这个方法不陌生。因为我们之前的组合控件也是重写了这个方法。到这里,就写完了。

大家可能还有疑问,为什么这样

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号