asp.net自定义控件
回发星级控件
- using System;
- using System.ComponentModel;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.HtmlControls;
- namespace ControlLibrary
- {
- public class PostStar : WebControl, IPostBackEventHandler, INamingContainer
- {
- private event EventHandler<StarEventArgs> _postScore;
- public event EventHandler<StarEventArgs> PostScore
- {
- add
- {
- _postScore += value;
- }
- remove
- {
- _postScore -= value;
- }
- }
- private void OnPostScore(object sender, StarEventArgs e)
- {
- if (_postScore != null)
- _postScore(sender, e);
- TableCell cell = ((Table)this.Controls[]).Rows[].Cells[];
- Panel panCur = (Panel)cell.Controls[].Controls[];
- panCur.Style.Add("width", e.Score * + "px");
- Panel panChange = (Panel)panCur.Controls[];
- panChange.Style.Add("display", "none");
- HtmlGenericControl ul = (HtmlGenericControl)cell.Controls[].Controls[];
- ul.Style.Add("display", "none");
- }
- [DefaultValue()]
- public int Score
- {
- get
- {
- object obj = ViewState["Score"];
- return obj == null ? : Convert.ToInt32(obj);
- }
- internal set
- {
- ViewState["Score"] = value;
- }
- }
- public string Comment
- {
- get
- {
- object obj = ViewState["Comment"];
- return obj == null ? string.Empty : Convert.ToString(obj);
- }
- set
- {
- ViewState["Comment"] = value;
- }
- }
- protected override void CreateChildControls()
- {
- base.CreateChildControls();
- CreateControlHierarchy();
- }
- protected virtual void CreateControlHierarchy()
- {
- Table table = new Table();
- TableRow row = new TableRow();
- table.Rows.Add(row);
- TableCell comment = new TableCell();
- CreateComment(comment);
- row.Cells.Add(comment);
- TableCell stars = new TableCell();
- CreateStars(stars);
- row.Cells.Add(stars);
- this.Controls.Add(table);
- }
- /// <summary>
- /// 向单元格中创建注释标签
- /// </summary>
- /// <param name="cell">单元格对象</param>
- private void CreateComment(TableCell cell)
- {
- cell.Text = Comment;
- }
- /// <summary>
- /// 向单元格中创建星形图案
- /// </summary>
- /// <param name="cell"></param>
- private void CreateStars(TableCell cell)
- {
- RegisterCSS();
- string starPath = Page.ClientScript.GetWebResourceUrl(this.GetType(), "ControlLibrary.Image.stars.gif");
- Panel panBg = CreateBackPanel(starPath);
- cell.Controls.Add(panBg);
- Panel panCur = CreateCurrentPanel(starPath);
- Panel panChange = CreateChangePanel(starPath);
- HtmlGenericControl ul = CreateList();
- panBg.Controls.Add(ul);
- panBg.Controls.Add(panCur);
- panCur.Controls.Add(panChange);
- }
- private void RegisterCSS()
- {
- string css = Page.ClientScript.GetWebResourceUrl(this.GetType(), "ControlLibrary.CSS.star.css");
- HtmlLink link = new HtmlLink();
- link.Href = css;
- link.Attributes.Add("rel", "stylesheet");
- link.Attributes.Add("type", "text/css");
- Page.Header.Controls.Add(link);
- }
- private Panel CreateBackPanel(string starPath)
- {
- Panel panBg = new Panel();
- panBg.ID = "divBg";
- panBg.Style.Add(HtmlTextWriterStyle.BackgroundImage, starPath);
- panBg.CssClass = "stars";
- return panBg;
- }
- private Panel CreateCurrentPanel(string starPath)
- {
- Panel panCur = new Panel();
- panCur.ID = "divCur";
- panCur.Style.Add(HtmlTextWriterStyle.BackgroundImage, starPath);
- panCur.CssClass = "current";
- return panCur;
- }
- private Panel CreateChangePanel(string starPath)
- {
- Panel panChange = new Panel();
- panChange.ID = "divChange";
- panChange.Style.Add(HtmlTextWriterStyle.BackgroundImage, starPath);
- panChange.CssClass = "change";
- return panChange;
- }
- private HtmlGenericControl CreateList()
- {
- HtmlGenericControl ul = new HtmlGenericControl("ul");
- ul.ID = "ulist";
- ul.Attributes.Add("class", "ulist");
- for (int i = ; i < ; i++)
- {
- HtmlGenericControl li = new HtmlGenericControl("li");
- li.Attributes.Add("value", (i + ).ToString());
- ul.Controls.Add(li);
- }
- return ul;
- }
- public void RaisePostBackEvent(string args)
- {
- if (!string.IsNullOrEmpty(args))
- {
- EnsureChildControls();
- int score = Convert.ToInt32(args);
- StarEventArgs e = new StarEventArgs();
- e.Score = score;
- OnPostScore(this, e);
- }
- }
- protected override void Render(HtmlTextWriter writer)
- {
- PrepareControlForRender();
- base.Render(writer);
- }
- private void PrepareControlForRender()
- {
- if (this.Controls.Count < )
- return;
- Table table = (Table)this.Controls[];
- table.CellSpacing = ;
- table.CellPadding = ;
- TableCell cell = table.Rows[].Cells[];
- Panel panCur = (Panel)cell.Controls[].Controls[];
- Panel panChange = (Panel)panCur.Controls[];
- HtmlGenericControl ul = (HtmlGenericControl)cell.Controls[].Controls[];
- for (int i = ; i < ul.Controls.Count; i++)
- {
- HtmlGenericControl li = (HtmlGenericControl)ul.Controls[i];
- li.Attributes.Add("onmouseover", "document.getElementById('" + panChange.ClientID + "').style.width='" + * (i + ) + "px';");
- li.Attributes.Add("onmouseout", "document.getElementById('" + panChange.ClientID + "').style.width='0px';");
- li.Attributes.Add("onclick", Page.ClientScript.GetPostBackClientHyperlink(this, (i + ).ToString()));
- }
- }
- }
- public class StarEventArgs : EventArgs
- {
- public int Score
- {
- get;
- set;
- }
- }
- }
页面调用:
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <title></title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <cc:PostStar ID="star" runat="server" Comment="Windows XP" OnPostScore="star_PostScore" />
- <br />
- <cc:PostStar ID="star2" runat="server" Comment="VISTA" OnPostScore="star_PostScore" />
- </div>
- </form>
- </body>
- </html>
后台:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- public partial class PostStarTest : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- }
- protected void star_PostScore(object sender, ControlLibrary.StarEventArgs e)
- {
- Response.Write(e.Score);
- }
- }
结果:
更多自定义控件的源代码
http://www.cnblogs.com/liuwj/admin/Files.aspx
asp.net自定义控件的更多相关文章
- asp.net 自定义控件
在Visual Studio中,所有的ASP.NET 2.0控件都是自定义控件,创建自己的自定义控件一般需要完成以下三步.(1)在站点APP_Code下创建一个新类:(2)修改这个类,让它成为WebC ...
- ASP.NET自定义控件组件开发 第五章 模板控件开发
原文:ASP.NET自定义控件组件开发 第五章 模板控件开发 第五章 模板控件开发 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接 ...
- ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl
原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经 ...
- ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡
原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡 CompositeControl 后篇 --事件冒泡 系列文章链接: ASP.NET ...
- ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇
原文:ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇 第三章 为控件添加事件 好了,我们之前以前开发一个控件.而且也添加了属性,开发也很规范,但是那个控件还差最后一点:添加事件. 系列 ...
- ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇
原文:ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇 第三章 为控件添加事件 后篇 前一篇文章只是简单的说了下事件,但是大家应该方法,在ASP.NET自定义控件中只是简单那么定义事件是 ...
- ASP.NET自定义控件组件开发 第一章 第三篇
原文:ASP.NET自定义控件组件开发 第一章 第三篇 第三篇:第一章的完结篇 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待 ...
- ASP.NET自定义控件组件开发 第二章 继承WebControl的自定义控件
原文:ASP.NET自定义控件组件开发 第二章 继承WebControl的自定义控件 第二章 继承于WebControl的自定义控件 到现在为止,我已经写了三篇关于自定义控件开发的文章,很感谢大家的支 ...
- ASP.NET自定义控件组件开发 第一章 第二篇 接着待续
原文:ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 很感谢大家给我的第一篇ASP.NET控件开发的支持!在写这些之前,我也看了 ...
- ASP.NET自定义控件组件开发 第一章 待续
原文:ASP.NET自定义控件组件开发 第一章 待续 第一章:从一个简单的控件谈起 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接 ...
随机推荐
- 001_bytearray
bytearray([source [, encoding [, errors]]]) 中文说明: bytearray([source [, encoding [, errors]]])返回一个byt ...
- 破解NET的四大神器
原本这篇文章可以更早一星期写出来与大家分享,由于某方面的原因耽搁到现在,心里竟有那么一点好像对不住大家的感觉.这当然与神器有关,因为我发现利用这四大神器我似乎觉得几乎所有的NET程序破解都不在话下了 ...
- IoC模式(Inversion of Control)
1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖.如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它.下面看 ...
- OC内存管理基础
OC 内存管理基础 一. retain和release基本使用 使用注意: 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作) 2.你不想再使用(占用)某个对象,就 ...
- swift 个人笔记
swift是现代编程语言的综合体,灵活而强大. //http://www.cocoachina.com/newbie/basic/2014/0604/8675.html //语法var 变量,let ...
- Codeforces Round #179 (Div. 1) A. Greg and Array 离线区间修改
A. Greg and Array Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/295/pro ...
- 谷歌插件开发(实现CSDN快速登陆)
谷歌浏览器插件带来了很大的方便,于是就想着是不是也可以开发一个来用用.几经折腾下,开发了个CSDN快速 登陆的插件.下面简述一下开发的步骤. 1.开发工具:谷歌浏览器(我开发时用的是chrome 30 ...
- Android 浅谈相机研发
在android中应用相机功能,一般有两种:一种是直接调用系统相机,一种自己写的相机. 我将分别演示两种方式的使用: 第一种:是使用Intent跳转到系统相机,action为:andro ...
- debian7编译内核
第一个步骤“配置内核”. 在这里,我比较建议在发行版默认的config的基础上再进行配置,这样 配置出的内核和发行版本身才会有更好的相容性.比如可以在运行“make menuconfig”之前执行命令 ...
- scala Option 里的 orNull orElse getOrElse 区别和使用
Scala Option Scala Option类型用来表示一个值是可选的(有值或无值) Option[T] 是一个类型为 T 的可选值的容器: 如果值存在, Option[T] 就是一个 Some ...