百度空间 | 百度首页 
 
查看文章
 
Asp.net自定义Panel控件
2008-11-17 09:56

网页上有很多“盒子”模型。如下图

代码并不复杂,但每次都要复制,未免太过于麻烦。于是就想写一个控件,类似于Panel控件的效果,当然,自己写个自定义控件,继承自Panel就行了。

在当前解决方案中,新建项目,选“Web控件库”;

创建好项目,即可“添加新建项”,选“自定义控件”即可。

控件的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CustomControl
{
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:MoreBox runat=server></{0}:MoreBox>")]
    public class MoreBox : Panel, INamingContainer
    {
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string Text
        {
            get
            {
                String s = (String)ViewState["Text"];
                return ((s == null) ? String.Empty : s);
            }

            set
            {
                ViewState["Text"] = value;
            }
        }
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string More
        {
            get
            {
                String s = (String)ViewState["More"];
                return ((s == null) ? String.Empty : s);
            }

            set
            {
                ViewState["More"] = value;
            }
        }

        public override void RenderControl(HtmlTextWriter writer)
        {
            //Panel控件中(标签之间)的文本内容
            base.RenderControl(writer);
        }
        protected override void Render(HtmlTextWriter output)
        {
            //Panel控件前面的代码
            RenderHead(output);
            //panel的css样式
            base.CssClass = "BoxContext";
            //输出控件
            base.Render(output);
            //Panel控件后面的代码
            RenderEnd(output);
        }
        protected void RenderHead(HtmlTextWriter writer)
        {
            string html = "";
            html += @"<div class=""ShowBox"">";
            html += @"<table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""100%"">
                      <tr>";
            //显示标题
            html += @"<td class=""MoreBoxTitle"">" + Text + "</td>";
            html += @"<td class=""MoreRight"">";
            if (More != "")
            {
                //显示更多
                html += "<a href=\""+More+"\">更多&gt;&gt;</a>";
            }
            html += @"</td></tr></table>";
           
//html+=@"<div class=""BoxContext"">";
             writer.Write(html);
        }
        protected void RenderEnd(HtmlTextWriter writer)
        {
            string html = @"";
            html += @"</div>";
            writer.Write(html);
        }

    }
}

在上面的控件中,Text属性是“盒子”的标题,More属性是“盒子”的“更多”的链接地址。
当然,里面还引用了一些CSS样式,我就不提供了,无非是起些美化作用罢了。

编译该项目后,在vs.net的左侧工具箱中,就会出一个新的选项卡,里面的控件,就是自己编写的控件。拖过来用就行了,很简单的,用法与Panel完全一样。


类别:Dotnet | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu