自定义控件
包括了用户自定义控件和定制控件两种方式,用户自定义控件是建立一个
.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.Button的button类控件。
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
的属性,并且我们也可以进行属性值的设置。