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


    前言
        上个星期三开始学自定义控件,做了不少练习。花了一上午时间写了一个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), 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(
    thisthis.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
    毕竟是刚学,肯定会有很多不足和错误,希望大家指正,谢谢。
    结尾
        继续努力,看完其它的资料。
  • 相关阅读:
    把自己电脑搭建为服务器(免费内网穿透心得)
    多态复习
    hadoop 第一个 mapreduce 程序(对MapReduce的几种固定代码的理解)
    Anaconda下的 Jupyter Notebook 安装 多python环境
    C++读写内存工具类X64 X86
    VS中MFC项目文件特别大的解决办法
    python记事本实现查询替换
    java格式化代码(java格式化代码工具类)
    Vue 之 slot(插槽)
    Vue全家桶之——Vuex
  • 原文地址:https://www.cnblogs.com/flyskyer/p/1557178.html
Copyright © 2020-2023  润新知