ASP.NET自定义控件ImageButton,有兴趣的进来看下
这个自定义控件效果: 支持文字与图片。 这个控件模仿winform中的button,可以支持图片和文字。可以选择执行服务器端程序还是客户端程序,还有一些简单的设置。 不足的是不支持样式
这个自定义控件效果:
支持文字与图片。
这个控件模仿winform中的button,可以支持图片和文字。可以选择执行服务器端程序还是客户端程序,还有一些简单的设置。
不足的是不支持样式,下次希望可以写一个工具条。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web.UI.WebControls; using System.ComponentModel; using System.Web.UI; using System.Drawing.Design; using System.Drawing.Drawing2D; namespace ClassLibrary1 { [Serializable] public class Picture { private Unit height = 16; private string src = string.Empty; [NotifyParentProperty(true)] [Browsable(true), Bindable(true), Description("图片路径"), Category("Appearance")] [Editor("System.Web.UI.Design.ImageUrlEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))] public string Src { get { return this.src; } set { this.src = value; } } [DefaultValue(typeof(Unit),"16px") ] [NotifyParentProperty(true)] public Unit Height { get { return height; } set { height = value; } } private Unit width = 16; [NotifyParentProperty(true)] [DefaultValue(typeof(Unit),"16px")] public Unit Width { get { return width; } set { width = value; } } public enum Align{Left ,Right } } [Serializable] public class Label { private string text = string.Empty; [NotifyParentProperty(true)] public string Text { get { return text; } set { text = value; } } private System.Drawing.Font fontFamily=new System.Drawing.Font("宋体",8); [NotifyParentProperty(true)] public System.Drawing.Font Font { get { return this.fontFamily; } set { this.fontFamily = value; } } } [PersistChildren(false )] [ParseChildren(true)] public class ImageButton:Control ,INamingContainer,IPostBackEventHandler { public enum RaiseEventType {Client,Server } private Picture pic = new Picture(); private Picture.Align picAlign = Picture.Align.Left; private Label label = new Label (); private string jsFunction = string.Empty; private static readonly object clickKey = new object(); public enum TextAlign {Left ,Center,Right } [Browsable(true), Bindable(true), Description("javascript方法"), Category("Action")] public string JSFunction { get { return this.jsFunction; } set { this.jsFunction = value; } } private RaiseEventType raiseEvent=RaiseEventType.Server ; [Browsable(true), Bindable(true), Description("响应事件方式"), Category("Action")] public RaiseEventType RaiseEvent { get { return this.raiseEvent; } set { this.raiseEvent = value; } } private TextAlign align = TextAlign.Left; [Browsable(true), Bindable(true), Description("文字的对齐方式"), Category("Appearance")] public TextAlign ALign { get { return align; } set { align = value; } } private Unit width = 80; [Browsable(true), Bindable(true), Description("控件宽度"), Category("Appearance")] [DefaultValue(typeof(Unit),"80px") ] public Unit Width { get { return this.width; } set { this.width = value; } } [Browsable(true),Bindable(true),Category("Action")] public event EventHandler OnClick { add { Events.AddHandler(clickKey ,value); } remove { Events.RemoveHandler(clickKey ,value); } } [Browsable(true), Bindable(true), Description("图片类"), Category("Appearance")] public Picture.Align PicAlign { get { return picAlign; } set { picAlign = value; } } [Browsable(true),Bindable(true),Description("图片类"),Category("Appearance")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content) ] [TypeConverter(typeof(ExpandableObjectConverter))] [PersistenceMode(PersistenceMode.InnerProperty)] public Picture Pic { get { return pic; } } [Browsable(true),Bindable(true),Description("文字类"),Category("Appearance")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content) ] [TypeConverter(typeof(ExpandableObjectConverter) )] [PersistenceMode(PersistenceMode.InnerProperty)] public Label Label { get { return label; } } protected override void Render(HtmlTextWriter writer) { if (raiseEvent == RaiseEventType.Server) { writer.AddAttribute(HtmlTextWriterAttribute.Onclick, Page.GetPostBackEventReference(this, this.ClientID)); } else { writer.AddAttribute(HtmlTextWriterAttribute.Onclick ,"javascript:" this.jsFunction); } writer.AddStyleAttribute(HtmlTextWriterStyle.Cursor ,"hand"); writer.AddStyleAttribute(HtmlTextWriterStyle.Width,this.width.Value.ToString() "px"); if (align == TextAlign.Left) { writer.AddStyleAttribute(HtmlTextWriterStyle.TextAlign ,"left" ); } else if (align == TextAlign.Center) { writer.AddStyleAttribute(HtmlTextWriterStyle.TextAlign, "center"); } else { writer.AddStyleAttribute(HtmlTextWriterStyle.TextAlign ,"right"); } writer.RenderBeginTag(HtmlTextWriterTag.Div ); if (PicAlign == Picture.Align.Left) { AddPic(writer); AddLabel(writer); } else {AddLabel(writer); AddPic(writer); } writer.RenderEndTag(); //base.Render(writer); } private void AddPic(HtmlTextWriter writer) { writer.AddAttribute(HtmlTextWriterAttribute.Src,base.ResolveClientUrl(pic.Src)); writer.AddAttribute(HtmlTextWriterAttribute.Height ,pic.Height.ToString()); writer.AddAttribute(HtmlTextWriterAttribute.Width ,pic.Width.ToString()); writer.RenderBeginTag(HtmlTextWriterTag.Img); writer.RenderEndTag(); // writer.Write("<image src= this.Src height=" pic.Height " width=" pic.Width " />"); } private void AddLabel(HtmlTextWriter writer) { writer.AddStyleAttribute(HtmlTextWriterStyle.VerticalAlign,"middle"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize ,label.Font.Size.ToString() "pt"); writer.AddStyleAttribute(HtmlTextWriterStyle.FontFamily,label.Font.FontFamily.Name ); if(label.Font.Bold) { writer.AddStyleAttribute(HtmlTextWriterStyle.FontWeight,"Bold" ); } writer.RenderBeginTag(HtmlTextWriterTag.Label); writer.Write(label.Text==string.Empty ?this.ClientID.ToString():label.Text); writer.RenderEndTag(); //writer.Write("<label>" Label.Text "</label>"); } #region IPostBackEventHandler 成员 public void RaisePostBackEvent(string eventArgument) { EventHandler e = (EventHandler)Events[clickKey]; if(e!=null) { e(this,EventArgs.Empty ); } } #endregion }
精彩图集
精彩文章
热门标签
抓取网页正文
改变
指定日期
XML操作
自动增长列
最大Id
php php自定
数据库名
跨iframe
find函数
数据存储
按比例
创建目录
指令
选不中
注入数据库
JS多语言
twisted
select加锁
脚本自身修改
__setattr__
主从
DDL
Too
可逆加密算法
sup方法
线程并发
自增长
段空间
Oracle字符集
网络打印
svn
复制文件夹
横屏
Promise
php php写入
python函数
页面宽度
memcach
context
百度热词
发布apk
相
django-suit
for语句
四叉树
目录传输
无法解析
Tab_control控
android设计模式
ForLinux2.6
memcpy()
草稿
发布项目
iis配置php
打
分页问题
注解
$符
UDP
赞助商链接
@CopyRight 2002-2008, 1SOHU.COM, Inc. All Rights Reserved QQ:1010969229