C#的组件编程

/*很多人认为写组件太难了,不知道如何下手,下面我以一个导航为例做一个简单的组件

*/
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

namespace XPStyleNavControl
{
 [DefaultProperty("Text"),
 ToolboxData("<{0}:WebCustomControl runat=server></{0}:WebCustomControl>")]
 public class WebCustomControl : System.Web.UI.WebControls.WebControl
 {
  #region 定义变量,默认值

  private string text = "";
  private string href = "";
  private string target = "_self";
  private bool displayPipe = true;
  private ColorStyle colorstyle=ColorStyle.Gray;

  #endregion

  #region 构造函数

  public WebCustomControl():base(HtmlTextWriterTag.Div)
  {
   
  }
  #endregion

  #region 定义属性
  [Description("该属性用于表示控件显示的文字内容"),
  Bindable(true),
  Category("XPStyleNavControlProperty"),
  DefaultValue("")]
  public string Text
  {
   get
   {
    return text;
   }

   set
   {
    text = value;    
   }
  }

  [Description("该属性用于表示控件显示的文字的超链接地址"),
  Bindable(true),
  Category("XPStyleNavControlProperty"),
  DefaultValue("")]
  public string Href
  {
   get
   {
    return href;
   }

   set
   {
    href = value;
   }
  }

  [Description("该属性用于表示控件显示超链接的目标框架"),
  Bindable(true),
  Category("XPStyleNavControlProperty"),
  DefaultValue("_self")]
  public string Target
  {
   get
   {
    return target;
   }
   set
   {
    target = value;
   }
  }

  [Description("该属性用于表示控件是否显示分隔符 | "),
  Bindable(false),
  Category("XPStyleNavControlProperty"),
  DefaultValue(true)]
  public bool DisplayPipe
  {
   get
   {
    return displayPipe;
   }

   set
   {
    displayPipe = value;
   }
  }

  [Description("控件宽度"),
  Bindable(false),
  Category("XPStyleNavControlProperty"),
  DefaultValue("100%")]
  public override Unit Width
  {
   get
   {
    return base.Width;
   }
   set
   {
    base.Width = value;
   }
  }

  [Description("控件颜色模式"),
  Bindable(false),
  Category("XPStyleNavControlProperty"),
  DefaultValue(ColorStyle.Gray)
  ]
  public ColorStyle ColorMode
  {
   get
   {
    return colorstyle;
   }
   set
   {
    colorstyle=value;
   }
  }


  #endregion


  ///<summary>
  ///将自定义样式写入HTTP输出流中去
  ///</summary>
  protected override void AddAttributesToRender(HtmlTextWriter output)
  {
   output.Write("<LINK REL='stylesheet' TYPE='text/css' HREF='css/xsnc.css'></LINK>");
   output.AddAttribute(HtmlTextWriterAttribute.Class,ColorMode.ToString()+"BackGround");
   output.AddStyleAttribute("width",Width.ToString());
            
   base.AddAttributesToRender(output);
  }

  /// <summary>
  /// 呈现控件的方法RenderContents
  /// </summary>
  protected override void RenderContents(HtmlTextWriter output)
  {
   //定义样式
   output.AddStyleAttribute(HtmlTextWriterStyle.Width,"10px");
   output.AddStyleAttribute(HtmlTextWriterStyle.FontSize,"12px");
   output.AddStyleAttribute(HtmlTextWriterStyle.FontFamily,"宋体");
   output.RenderBeginTag(HtmlTextWriterTag.Span);
   
   output.AddAttribute(HtmlTextWriterAttribute.Class,ColorMode.ToString()+"StyleOut");   
   output.AddAttribute("onmouseout","this.className='"+ColorMode.ToString()+"StyleOut'");
   output.AddAttribute("onmouseover","this.className='"+ColorMode.ToString()+"StyleOver'");
   
   output.AddAttribute(HtmlTextWriterAttribute.Href,Href);
   output.AddAttribute(HtmlTextWriterAttribute.Target,Target);
   output.RenderBeginTag(HtmlTextWriterTag.A);
   output.Write(text);
   output.RenderEndTag();
   output.RenderEndTag();

   //定义分隔符及样式
   if(DisplayPipe)
   {
    output.AddAttribute(HtmlTextWriterAttribute.Class,ColorMode.ToString()+"Line");
    output.RenderBeginTag(HtmlTextWriterTag.Span);
    output.Write("|");
    output.RenderEndTag();
   }
   else
   {
    output.RenderBeginTag(HtmlTextWriterTag.Span);
    output.Write("&nbsp;");
    output.RenderEndTag();
   }

   //使用默认逻辑来呈现子控件
   base.RenderContents(output);
  }

  public enum ColorStyle
  {
   Gray,Blue
  }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值