zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    WebADI_数据验证1_建立基于PLSQL返回FND Message验证(案例)
    PLSQL_案例优化系列_探寻表设计对SQL优化的重要性(案例4)
    PLSQL_案例优化系列_学习左右SQL执行计划各种方法(案例14)
    PLSQL_案例优化系列_探讨该如何分析读懂析执行计划(案例9)
    WebADI_配置设定08_设定参数WebADI Parameters List(案例)
    WebADI_案例实施01_开发一个基于R12.1.3的简单WebADI Desktop(案例)
    PLSQL_案例优化系列_洞察表连接与SQL优化之间关系(案例8)
    WebADI_配置设定09_设定组件WebADI Components(案例)
    WebADI_配置设定07_设定显示WebADI Content / Mapping(案例)
    WebADI_案例实施03_利用FND_LOAD安装和迁移WEBADI以及设定(案例)
  • 原文地址:https://www.cnblogs.com/alibai/p/4032172.html
Copyright © 2011-2022 走看看