第07章 Web自定义控件.ppt

上传人:s****8 文档编号:69353183 上传时间:2023-01-02 格式:PPT 页数:56 大小:267.50KB
返回 下载 相关 举报
第07章 Web自定义控件.ppt_第1页
第1页 / 共56页
第07章 Web自定义控件.ppt_第2页
第2页 / 共56页
点击查看更多>>
资源描述

《第07章 Web自定义控件.ppt》由会员分享,可在线阅读,更多相关《第07章 Web自定义控件.ppt(56页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第7章 Web自定义控件 郑州信息科技职业学院 张中兴本章内容包括:如何使用Visual Studio 2005开发环境建立一个Web自定义控件,以及如何将自定义控件应用到具体的Web项目中。如何给一个控件创建子控件。使用控件分析器来简化子控件标记的代码,并说明分析器的完整执行过程。编写一个简单的复合控件。关于关于 Web Web 用户控件与用户控件与 Web Web 自定义控件的建议自定义控件的建议如果现有的如果现有的 ASP.NET ASP.NET 服务器控件都不符合应用程序的特服务器控件都不符合应用程序的特定要求,则可以创建封装所需功能的定要求,则可以创建封装所需功能的 Web Web

2、用户控件或用户控件或 Web Web 自定义控件。这两种控件之间的主要区别在于设计自定义控件。这两种控件之间的主要区别在于设计时的易创建性与易用性。时的易创建性与易用性。Web Web 用户控件用户控件WebWeb易于创建易于创建为使用可视化设计工具的使用者提供有限的支持为使用可视化设计工具的使用者提供有限的支持每个应用程序中需要控件的一个单独副本每个应用程序中需要控件的一个单独副本不能添加到不能添加到 Visual Studio Visual Studio 中的工具箱中的工具箱适用于静态布局适用于静态布局自定义控件自定义控件难于创建难于创建为使用者提供完全的可视化设计工具支持为使用者提供完全

3、的可视化设计工具支持仅在全局程序集缓存中需要控件的单个副本仅在全局程序集缓存中需要控件的单个副本可以添加到可以添加到 Visual Studio Visual Studio 中的工具箱中的工具箱适用于动态布局适用于动态布局7.1 一个简单的自定义ASP.NET控件 1.1.新建网站新建网站2.2.建立类库项目建立类库项目3.3.建立一个建立一个WebWeb自定义控件类自定义控件类 选中“My Components”项目图标并在上面右击选择“添加新建项Web自定义控件”。说明:Visual Studio 2005开发环境会生成一个不需要任何修改就可以运行的控件代码,其中比较常用的一个函数就是Re

4、nderContents,该函数会在控件需要呈现给用户时被调用。编译通过之后,需要在Web项目中引用这个控件库。做法是:在“解决方案资源管理器”中选中Web项目图标,在上面右击选择“添加引用”。在弹出的“添加引用”对话框中选择“项目”选项卡,并选择“My Components”项目。最后点击“确定”按钮。同时在工具箱能够看到新增的控件,将其拖入页面设置同时在工具箱能够看到新增的控件,将其拖入页面设置其其Text属性,观察运行结果。属性,观察运行结果。7.2 子控件 子控件最为常见的应用就是子控件最为常见的应用就是“select”select”标记,例如:标记,例如:一一 二二 三三为一个为一个

5、WebWeb自定义控件添加子控件的方法:在定义控件类自定义控件添加子控件的方法:在定义控件类时,给这个类贴上一个时,给这个类贴上一个“ParseChildren(falseParseChildren(false)”)”属属性标记。性标记。ParseChildrenParseChildren必须被设置成必须被设置成falsefalse,让,让ASP.NETASP.NET知道我们知道我们已经对子属性进行了处理,无需再对它进行进一步地解已经对子属性进行了处理,无需再对它进行进一步地解析了。析了。falsefalse值表明子属性不是外部对象的特性,而仅仅值表明子属性不是外部对象的特性,而仅仅是子控件的

6、特性。是子控件的特性。在类库中新添加在类库中新添加Web自定义控件自定义控件MyControl2,更新为如下内,更新为如下内容:容:namespace MyComponents DefaultProperty(Text)ToolboxData()ParseChildren(false)public class MyControl2:WebControl protected override void AddParsedSubObject(object obj)if(!(obj is MyControl1)return;base.AddParsedSubObject(obj);看下面的页面代码:

7、看下面的页面代码:%Register Assembly=MyComponents Namespace=MyComponents TagPrefix=WebUI%说明:虽然在工具箱中可以看到子控件说明:虽然在工具箱中可以看到子控件MyControl1,但不能,但不能直接拖入到直接拖入到MyControl2。7.2.2 建立分析器 虽然可以通过设置子控件方式为控件增加使用上的灵活虽然可以通过设置子控件方式为控件增加使用上的灵活性,但还有些不方便之处。一般地,子控件可表现为控性,但还有些不方便之处。一般地,子控件可表现为控件的子属性,这样会更加直观。例如:件的子属性,这样会更加直观。例如:WebUI

8、:MyControl2=server 第一步:可通过建立分析器实现上述目的。具体的做法第一步:可通过建立分析器实现上述目的。具体的做法是编写一个新类,继承是编写一个新类,继承ControlBuilder类并覆写类并覆写GetChildControlType函数,函数,使得对于使得对于“item”标签可解析为标签可解析为MyControl1。文件名存储为文件名存储为MyControl2ControlBuilder.cs,注意最好与类名一致。,注意最好与类名一致。using System;using System.Collections;using System.Web.UI;namespace

9、MyComponents internal class MyControl2ControlBuilder:ControlBuilder /获取与子标记对应的控件类型获取与子标记对应的控件类型 public override Type GetChildControlType(string tagName,IDictionary attribs)if(String.Compare(tagName,item,true)=0)return typeof(MyControl1);/解析为解析为MyControl1 return null;第二步:把分析器以标签的形式贴到控件头上,例如:第二步:把分析器以

10、标签的形式贴到控件头上,例如:ControlBuilderAttribute(typeof(MyControl2ControlBuilder)namespace MyComponents DefaultProperty(Text)ToolboxData()ParseChildren(false)ControlBuilderAttribute(typeof(MyControl2ControlBuilder)public class MyControl2:WebControl protected override void AddParsedSubObject(object obj)if(!(ob

11、j is MyControl1)/类型是否为类型是否为MyControl1,若是则创建,若是则创建 return;base.AddParsedSubObject(obj);7.3 复合控件 将几个服务器控件组合在一起即形成一个新的控件称为将几个服务器控件组合在一起即形成一个新的控件称为复合控件。复合控件。先看实例:先看实例:在浏览器中显示结果为:在浏览器中显示结果为:LabelButton此处关键是自定义控件此处关键是自定义控件MyControl3具体实现:namespace MyComponentsDefaultProperty(Text)ToolboxData()ParseChildren

12、(false)ControlBuilderAttribute(typeof(MyControl2ControlBuilder)public class MyControl3:WebControl/项目集合项目集合private IList m_items=new List();/System.Web.UI.WebControls.Buttonprivate Button m_nextCmd=new Button();/添加已经通过语法分析的控件添加已经通过语法分析的控件protected override void AddParsedSubObject(object obj)if(!(obj

13、is MyControl1)return;/将该控件添加到项目集合将该控件添加到项目集合this.m_items.Add(obj as MyControl1);base.AddParsedSubObject(obj);/初始化初始化MyControl3,添加按钮控件,添加按钮控件protected override void OnInit(EventArgs e)base.OnInit(e);/按钮文本按钮文本this.m_nextCmd.Text=下一条提示下一条提示;/为按钮添加点击事件为按钮添加点击事件this.m_nextCmd.Click+=new EventHandler(this

14、.NextCmd_Click);/下页定义下页定义/将按钮加入到服务器子控件集合将按钮加入到服务器子控件集合this.Controls.Add(this.m_nextCmd);/按钮点击事件,滚动提示信息按钮点击事件,滚动提示信息private void NextCmd_Click(object sender,EventArgs e)int index=this.SelectedIndex;if(+index=this.m_items.Count)index=0;this.SelectedIndex=index;/设置或获取所选择的项目索引设置或获取所选择的项目索引public int Sel

15、ectedIndexsetthis.ViewStateselectedIndex=value;getreturn Convert.ToInt32(this.ViewStateselectedIndex);点点击击按按钮钮时时将将索索引引值值加加1,这这样样就就会会显显示示下下一一条条提提示示。当当索索引引值值大大于于提提示示信信息息数数目时,就从头开始显示。目时,就从头开始显示。注注意意:这这里里使使用用的的ViewStateViewState用用来来保保存存所所选选项项目目索索引引,而而并并非非使使用用intint类类型型的的变变量量。这这样样做做的的原原因因是是可可以以保保证证控控件件从从回回传传页页面面(IsPostBackIsPostBack为为truetrue)中中读读取取数数值值 /绘制控件绘制控件protected override void Render(HtmlTextWriter writer)/绘制被选择的项目提示绘制被选择的项目提示this.m_itemsthis.SelectedIndex.RenderControl(writer);/绘制命令按钮绘制命令按钮this.m_nextCmd.RenderControl(writer);/class /namesspace本章结束

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com