ASP.NET 用户控件自定义属性、方法、事件
????? 原文件鏈接:http://www.cnblogs.com/stalwart/archive/2010/12/16/1908302.html
????? 之前一直寫MVC的,本來就不大喜歡.NET中的服務器控件,里面的缺點很多,但有時候用起來方便,而且現在的項目開發中也要用到。
所以就找了好多資料來看一下,現在做一下記錄。
下面給出例子,一個用戶登陸的用戶控件,里面外加了個自定義事件按鈕。
用戶控件效果圖:
?
給出用戶控件中的代碼
?代碼
using?System;using?System.Collections.Generic;
using?System.Linq;
using?System.Web;
using?System.Web.UI;
using?System.Web.UI.WebControls;
namespace?Dome
{
????//聲明一個委托
????public?delegate?void?ClickEventHandler(object?sender,?EventArgs?e);
????public?partial?class?Login?:?System.Web.UI.UserControl
????{
????????public?string?UserName
????????{
????????????get?{?return?txtUserName.Text;?}
????????????set?{?txtUserName.Text?=?value;?}
????????}
????????public?string?PassWord
????????{
????????????get?{?return?txtPassWord.Text;?}
????????????set?{?txtPassWord.Text?=?value;?}
????????}
????????//可用按鈕
????????public?Button?LoginButton
????????{
????????????get?{?return?this.SubmitLogin;?}
????????????set?{?this.SubmitLogin?=?value;?}
????????}
????????protected?void?Page_Load(object?sender,?EventArgs?e)
????????{
????????????//加載方法
????????????test();
????????}
????????//可用方法
????????public?void?test()
????????{
????????????Response.Write("方法輸出<br>");
????????}
????????protected?void?SubmitLogin_Click(object?sender,?EventArgs?e)
????????{
????????????Response.Write("登陸原有事件<br>");
????????}
????????//聲明單擊事件
????????public?event?ClickEventHandler?Click;
????????//判斷事件是否被訂閱
????????protected?void?OnClick(EventArgs?e)
????????{
????????????if?(Click?!=?null)
????????????????Click(this,?e);
????????}
????????protected?void?SubmitLogin0_Click(object?sender,?EventArgs?e)
????????{
????????????Response.Write("用戶自定義控件原來的!<br>");
????????????//調用事件
????????????this.OnClick(e);
????????}
????}
}
?
下面是引用頁面的代碼
代碼 <%@?Page?Language="C#"?AutoEventWireup="true"?CodeBehind="WebForm1.aspx.cs"?Inherits="Dome.WebForm1"?%><%@?Register?src="Controls/Login.ascx"?tagname="Login"?tagprefix="uc1"?%>
<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html?xmlns="http://www.w3.org/1999/xhtml"?>
<head?runat="server">
????<title></title>
</head>
<body>
????<form?id="form1"?runat="server">
????<div>
????
????????<uc1:Login?ID="Login1"?runat="server"?/>
????
????</div>
????</form>
</body>
</html>
?后臺代碼
代碼 using?System;using?System.Collections.Generic;
using?System.Linq;
using?System.Web;
using?System.Web.UI;
using?System.Web.UI.WebControls;
namespace?Dome
{
????public?partial?class?WebForm1?:?System.Web.UI.Page
????{
????????protected?void?Page_Load(object?sender,?EventArgs?e)
????????{
????????????Login1.UserName?=?"test";
????????????Login1.PassWord?=?"psss";
????????????//取公有可用的事件
????????????Login1.LoginButton.Click?+=?new?EventHandler(LoginButton_Click);
????????????//自定義事件
????????????Login1.Click?+=?new?ClickEventHandler(Login1_Click);
????????}
????????void?Login1_Click(object?sender,?EventArgs?e)
????????{
????????????Response.Write("用戶自定義控件事件測試<br>");
????????}
????????void?LoginButton_Click(object?sender,?EventArgs?e)
????????{
????????????Response.Write("重定義單擊事件");
????????}
????}
}
?
?
1、 用戶控件中屬性
這個屬性就比較方便了。只要你能把用戶控件也看著是一個類,那他里面就可以設置屬性,有屬性就可以在調用時用到。
看了上面的代碼相信大家也能明白屬性是如何用了。
?2、用戶控件中方法
//可用方法????????public?void?test()
????????{
????????????Response.Write("方法輸出<br>");
????????}
?
?上面的方法只要聲明為公有的,在引用用戶控件時就可以用了。想要在用戶控件中用這個方法就在Page_Load中引用test();就可以了。
其它上面的屬性和方法都比較好理解
?3、用戶控件中的事件,有兩種方法去寫
?? ?1、第一個就是如上面的例子中的登陸按鈕,定義一個Button屬性,這樣就可以在引用用戶控件時來委托一個事件了。
//可用按鈕????????public?Button?LoginButton
????????{
????????????get?{?return?this.SubmitLogin;?}
????????????set?{?this.SubmitLogin?=?value;?}
????????}
?
調用時如上面的引用頁的后臺代碼,這里就不提出來了。
??2、自己聲明用委托來聲明一個事件
?在網上看一到一個關于委托與事件區別的例子,自己感覺不錯。這里拿出來給大家看一下。
比如說一個公司(場景),你是老板,手下有兩個員工,小張和小王。 你命令小王,如果小張玩游戲,則小王扣去小張500元錢。 ?
這就是現實中的委托。
實際上,在寫程序中,程序員就是老板,小張和小王就是兩個對象。小張玩游戲是一個方法,小張還有一個游戲事件,他玩游戲激發這個事件。
而小王就是事件處理對象,他負責把小張的錢扣除500。
所以,委托有如下幾個要素:
1 激發事件的對象--就是小張
2 處理對象事件的對象--就是小王
3 定義委托,就是你讓小王監視小張。
如果這三個要素都滿足的話,則你就寫出了一個完整事件的處理。
?這樣你再對比一下上面的代碼來看一下,是否會更好理解。
最好給出最終的兩個效果圖?
1、單擊登陸按鈕時的效果圖, 輸出了方法的文字和屬性,還有,事件原來的文字和委托后的文字
?
2、單擊自定義控件效果圖?
?
轉載于:https://www.cnblogs.com/scgw/archive/2011/04/10/2011109.html
總結
以上是生活随笔為你收集整理的ASP.NET 用户控件自定义属性、方法、事件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt5:渐变效果的实现
- 下一篇: Log4Net 全方位跟踪程序运行