文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>ASP.NET自定义控件编程1

ASP.NET自定义控件编程1

时间:2010-08-20  来源:Victor2008

实现一个简单的文本显示控件,作用是页面上显示一些信息,如lable
1.创建一个解决方案,里边分别建立一个Web控件库和一个网站(别忘了网站要添加应用Web控件库哦)
2.创建自定义控件类MyControl.cs,引入命名空间
......
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebControlLibrary
{
//别忘了继承自WebControl
    public class MyControl : WebControl
    { }
}
3.根据我们的需求,知道我们需要一个属性用于显示信息就足够了,这里定义成Text
定义Text属性,并存在viewstate中,如果值为空则给个默认值空字符串
 //自定义属性Text
        public string Text
        {
            get
            {
                object obj = ViewState["Text"];
                return obj == null ? string.Empty : Convert.ToString(obj);

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

        }
4.重写Control类上的CreateChildControls方法,用于创建控件层次,以便为回发和呈现做准备。在该方法中调用

了自定义的CreateControlHierarchy方法创建控件层次。
protected virtual void CreateControlHierarchy()
        {
            //创建一行一列的表格,用于控件布局
            Table table = new Table();
            TableRow row = new TableRow();
            table.Rows.Add(row);

            TableCell text = new TableCell();
            //创建Text
            CreateText(text);
            row.Cells.Add(text);
            this.Controls.Add(table);
        }

        private void CreateText(TableCell cell)
        {
            //将Text写入表格中
            cell.Text = Text;
        }
5.重写父类的Render方法,将服务器控件的内容传递给HtmlTextWriter对象以在客户端显示,在该方法中调用了

PrepareControlForRender方法,用于在呈现前进行其他样式的设置
/// <summary>
        /// 将服务器控件的内容传递给HtmlTextWriter对象以在客户端呈现内容
        /// </summary>
        /// <param name="writer"></param>
        protected override void Render(HtmlTextWriter writer)
        {
            PrepareControlForReader();
            base.Render(writer);
        }

        /// <summary>
        /// 用于在呈现前进行其他样式的设置,在本控件中,只是简单的设置了表格的CellSpacing和

CellPadding属性:
        /// </summary>
        private void PrepareControlForReader()
        {
            if (this.Controls.Count < 1)
                return;
            Table table = (Table)this.Controls[0];
            table.CellSpacing = 0;
            table.CellPadding = 0;
        }


OK,做好了,我们在页面上试试吧
1.页面上自定义控件什么
<%@ Register Assembly="WebControlLibrary" Namespace="WebControlLibrary" TagPrefix="cc" %>
2.在页面相应位置定义自定义控件:
<cc:MyControl ID="MyControl" runat="server" Text="Hello World!"
Font-Size="12px" />
好了,运行起来看看吧,呵呵、
其他:
1.如果经常用该控件,每次进来都声明是不是很麻烦呢,写入web.config吧,这样直接用就可以了
<pages>
  <controls>
    <add tagPrefix="cc" assembly="WebControlLibrary" namespace="WebControlLibrary"/>
  </controls>
</pages>
2.如果我们自定义的控件中用到了图片,做如下处理就可以了
找到你的AssemblyInfo.cs,导入命名空间 using System.Web.UI;
之后
//import webresource
[assembly: WebResource("WebControlLibrary.images.stars.jpg", "image/jpg")]
这样图片就打入程序集里边了,终于有封装的感觉了。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载