注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

杨伟的博客

程序人生

 
 
 

日志

 
 

将 ASP.NET 的用户控件移植为自定义控件  

2011-06-11 12:26:00|  分类: IT界 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

用户控件和自定义控件,早期版本的英文是指 User Controls 和 Custom Controls。在 asp.net 4.0 里面,指的是 Web User Control 和 ASP.NET Server Control。至于两者的区别,以及为什么要这么移植,我就不多说了,相信能搜到这篇文章的应该都知道吧。以下简单说说移植的几个步骤:

1. 先创建用户控件,并确保可以在 webform 中正常使用。
  注意,用户控件派生自 System.Web.UI.UserControl。

2. 新建项目 ASP.NET Server Control,项目会创建一个默认的自定义控件。
  注意,自定义控件派生自 System.Web.UI.WebControls.WebControl。
  如果该控件有可能同时在一个页面上出现多个,需要再加上接口 INamingContainer,这样可以避免 ID 冲突。例如:
  public class MyControl : WebControl, INamingContainer

3. 将用户控件 class 里面的所有代码拷贝到自定义控件的 class 里面。注意,不仅 .ascx.cs 里面有代码,在 .ascx.designer.cs 里面也有(对控件的定义)代码,别忘了拷贝过来。

4. 在自定义控件类中,重写 OnInit 虚函数,并添加函数 InitializeComponent() 以及对其的调用:
  protected override void OnInit(EventArgs e)
  {
    InitializeComponent();
    base.OnInit(e);
  }
  private void InitializeComponent()
  {
  }

5. 在 InitializeComponent() 函数中添加控件的创建、属性赋值、事件添加等代码。注意:如果需要调用函数 Page_Load,记得添加相关事件。下面给一个 InitializeComponent() 的例子:
  private void InitializeComponent()
  {
    TextBox1 = new TextBox();
    TextBox1.ID = "TextBox1";
    TextBox1.Text = "EasyX Sample";
    TextBox1.ReadOnly = true;

    Panel1 = new Panel();
    Panel1.ID = "Panel1";
    Panel1.Attributes.CssStyle.Value = "MyPanel";

    TextBox2 = new TextBox();
    TextBox2.ID = "TextBox2";

    this.Load += new System.EventHandler(this.Page_Load);

    Panel1.Controls.Add(TextBox2);
    Controls.Add(TextBox1);
    Controls.Add(Panel1);

    // 如果需要添加 HTML 标记,可以在 RenderContents 里面输出,也可以这么做:
    // Controls.Add(new HtmlControls.HtmlGenericControl("br"));
  }

6. 在 RenderContents 里面添加 HTML 输出,例如:
  protected override void RenderContents(HtmlTextWriter output)
  {
    TextBox1.RenderControl(output);
    output.Write("<br />");
    Panel1.RenderControl(output);
    output.Write("<br />");
  }

经过以上几个步骤,就可以成功编译出自定义控件了。别的细节功能,例如给 ToolBox 里面的控件加个图标什么的,相关文章很多,这里不再详述。

  评论这张
 
阅读(3)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018