程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Asp.net2.0之自定義控件ImageButton

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

編輯:.NET實例教程


前言

上個星期三開始學自定義控件,做了不少練習。花了一上午時間寫了一個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(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

畢竟是剛學,肯定會有很多不足和錯誤,希望大家指正,謝謝。

結尾,繼續努力,看完其它的資料。

原文地址:http://www.cnblogs.com/flyskyer/archive/2009/08/31/1557178.Html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved