·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> Asp.net2.0之自定义控件ImageButton

Asp.net2.0之自定义控件ImageButton

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

asp.net2.0之自定义控件ImageButton

控件模仿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), Descrip(www.111cn.net)tion("图片类"), 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 from:http://www.111cn.net/net/32/9ed732ed9fd1bfde9d3d8bcdddcc7877.htm