posts - 77, comments - 54, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

自定义控件

Posted on 2006-08-16 15:25 东人EP 阅读(376) 评论(0)  编辑 收藏 引用 所属分类: .NET

自定义控件

      包括了用户自定义控件和定制控件两种方式,用户自定义控件是建立一个 .ascx 文件,将 ASP.NET 的控件进行组装,需要 ASP.NET 源代码,但定制控件则不同,定制控件本身是包含在装配件中的,简单说定制控件是编译成程序集形式的。下面举例说明用户自定义控件:

我们的目的是组装一个如下的控件,输入用户密码验证登陆,点击登陆时触发 Change 事件。

namespace Web

{

    using System;

    using System.Data;

    using System.Drawing;

    using System.Web;

    using System.Web.UI.WebControls;

    using System.Web.UI.HtmlControls;

    using System.Data.SqlClient;

    using System.Configuration;

 

    /// <summary>

    ///        WebUserControl1 的摘要说明。

    /// </summary>

    public class WebUserControl1 : System.Web.UI.UserControl

    {

        protected System.Web.UI.WebControls.Label Message;

        protected System.Web.UI.WebControls.TextBox txtUser;

        protected System.Web.UI.WebControls.TextBox txtPassword;

        protected System.Web.UI.WebControls.Button Login;

 

        private void Page_Load(object sender, System.EventArgs e)

        {

            // 在此处放置用户代码以初始化页面

        }

 

        #region Web 窗体设计器生成的代码

        override protected void OnInit(EventArgs e)

        {

            //

            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。

            //

            InitializeComponent();

            base.OnInit(e);

        }

 

        /// <summary>

        ///         设计器支持所需的方法 - 不要使用代码编辑器

        ///         修改此方法的内容。

        /// </summary>

        private void InitializeComponent()

        {

            this.Login.Click += new System.EventHandler(this.Login_Click);

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

 

        }

        #endregion

 

        public event System.EventHandler Change;

 

        public void OnChanger(object a, EventArgs e)

        {

            this.Message.Text = "Event Active";

            Change(a, e);

        }

 

         private string _userName;

 

        public string UserName

        {

            get

            {

                return _userName;

            }

            set

            {

                _userName = value;

            }

        }

 

        private string _password;

 

        public string Password

        {

            get

            {

                return _password;

            }

            set

            {

                _password = value;

            }

        }

 

        private void Login_Click(object sender, System.EventArgs e)

        {

            SqlConnection conn = newSqlConnection(ConfigurationSettings.AppSettings["ConnectionSqlServer"].ToString());

            _userName = this.txtUser.Text;

            _password = this.txtPassword.Text;

            string select = "select [password] as pwd from users where username = '" + _userName + "'";

            SqlCommand com = newSqlCommand(select, conn);

            SqlDataReader dr = null;

            try

            {

                conn.Open();

                dr = com.ExecuteReader();

                while (dr.Read())

                {

                    if (dr["pwd"].ToString() == _password)

                    {

                        Message.Text = " 验证通过!" ;

                        return;

                    }

                }

                Message.Text = " 验证不通过!" ;

            }

            finally

            {

                dr.Close();

                conn.Close();

            }

        }

    }

}

html 源码也要做一些处理工作, <asp:Button id="Login" runat="server" Text=" 登陆" OnClick="OnChanger" ></asp:Button> 加入OnClick= OnChanger 此事件是事件触发程序。

 

定制控件:是在创建项目时创建一个控件库项目,其项目文件主要是.cs文件,完成内容编辑后,编译成dll控件库的形式,当使用这个控件时,可以从控件面板倒入后,和其他系统的控件一样使用就行了。

如下创建了一个简单的继承于WebControls.Buttonbutton类控件。

using System;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.ComponentModel;

 

namespace WebControlLibrary1

{

    /// <summary>

    /// WebCustomControl1 µÄժҪ˵Ã÷¡£

    /// </summary>

    [DefaultProperty("Button"),

        ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")]

    public class WebCustomControl1 : System.Web.UI.WebControls.Button

    {

        private System.Int32 btnid;

 

        [Bindable(true),

            Category("Appearance"),

            DefaultValue("")]

        public int BtnID

        {

            get

            {

                return btnid;

            }

 

            set

            {

                btnid = value;

            }

        }

    }

}

其目的是给这个控件加一个 int 型属性,我在应用程序中,引用这个控件并在控件实例的属性中看到了,我们定义的 BtnID 的属性,并且我们也可以进行属性值的设置。

只有注册用户登录后才能发表评论。