Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Test_WebForm._Default" %>
<html>
<body>
<form id="Form1" runat="server">
<asp:Button ID="Button1" runat="server" Text="Button1" CommandName="按鍵 1" />
<asp:Button ID="Button2" runat="server" Text="Button2" CommandName="按鍵 2" />
<br>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</form>
</body>
</html>
<body>
<form id="Form1" runat="server">
<asp:Button ID="Button1" runat="server" Text="Button1" CommandName="按鍵 1" />
<asp:Button ID="Button2" runat="server" Text="Button2" CommandName="按鍵 2" />
<br>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</form>
</body>
</html>
Default.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Test_WebForm
{
public partial class _Default : System.Web.UI.Page
{
#region 透過委派 (Delegate) 方式,取得對應的作用按鈕,引發相關的 Click 事件
//委派宣告
public delegate void ClickEventHandler(object sender, EventArgs e);
{
public partial class _Default : System.Web.UI.Page
{
#region 透過委派 (Delegate) 方式,取得對應的作用按鈕,引發相關的 Click 事件
//委派宣告
public delegate void ClickEventHandler(object sender, EventArgs e);
protected void Button_Click(object sender, EventArgs e)
{
//判斷哪個鍵被按
switch (((Button)sender).ID)
{
case "Button1":
Click(sender);
TextBox1.BackColor = System.Drawing.Color.SkyBlue;
break;
case "Button2":
Click(sender);
TextBox1.BackColor = System.Drawing.Color.Yellow;
break;
}
}
#endregion
{
//判斷哪個鍵被按
switch (((Button)sender).ID)
{
case "Button1":
Click(sender);
TextBox1.BackColor = System.Drawing.Color.SkyBlue;
break;
case "Button2":
Click(sender);
TextBox1.BackColor = System.Drawing.Color.Yellow;
break;
}
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
Button1.Click += new EventHandler(Button_Click);
Button2.Click += new EventHandler(Button_Click);
}
{
Button1.Click += new EventHandler(Button_Click);
Button2.Click += new EventHandler(Button_Click);
}
protected void Click(object sender)
{
TextBox1.Text = "You clicked the " + ((Button)sender).CommandName;
}
}
}
*******************************************************************************************
{
TextBox1.Text = "You clicked the " + ((Button)sender).CommandName;
}
}
}
*******************************************************************************************
利用委派進階叫用函式。
1. 委派可以將方法當成參數來進行傳遞
委派宣告:
[public|private|proected] Delegate [void | 回傳資料型態] 委派名稱 ([參數群一]);
[public|private|proected] Delegate [void | 回傳資料型態] 委派名稱 ([參數群一]);
2. 委派是事件的基礎(event),可以利用委派來呼叫不同的事件,以便觸發其他控制項事件來完成互動性強大的應用程式。
事件宣告:
public event ClickEventHandler ClickEvent;
[存取修飾詞] event 委派方法 事件名稱 ;
public event ClickEventHandler ClickEvent;
[存取修飾詞] event 委派方法 事件名稱 ;
3. Delegate方法,可用於向某個Class傳遞註冊過的方法(註冊的Method的參數必須和Delegate方法完全一致)
4. VB已有WithEvents不使用委派也能達到觸發事件的功能,但在C#必須自己宣告委派才能使用事件,C#在使用事件還真麻煩呢。
如何使用委派傳遞方法
1.建立方法;一個有回傳值,一個沒有。
public int InstanceMethod(int a, int b)
{
Console.WriteLine("Call InstanceMethod ");
Console.WriteLine("First parametre is {0},second parametre is {1}", a, b);
return 0;
}
static public void StaticMethod()
{
Console.WriteLine("Call Static Method");
}
2.宣告委派;委派參數,需要與被呼叫的方法一樣,包含回傳型別。
private delegate void MyDelegate();
private delegate int MeDelegatePara(int a, int b);
3.引用委派(實體化),後指定方法
MyDelegate D = new MyDelegate(MyClass.StaticMethod);
4.呼叫函數
D.Invoke();
可省略成
D();
如何使用事件傳遞方法
1.建立事件函數
修飾詞最好使用protected virtual這樣子類別就可以直接覆寫事件觸發的定義
private void MyButton_Click(object sender, EventArgs e)
{
Console.WriteLine("事件發生了喔");
}
2.委派宣告
public delegate void ClickEventHandler(object sender, EventArgs e);
3.創建MyBottom類別
4.宣告MyBottom的事件
5.建立MyButton成員方法
6.拋出事件,給所有相應者
4.宣告MyBottom的事件
5.建立MyButton成員方法
6.拋出事件,給所有相應者
//3.創建MyBottom類別
public class MyButton
{
//4.宣告MyBottom的事件
public event ClickEventHandler ClickEvent;
//5.建立MyButton成員方法
public void Click()
{
if (ClickEvent != null)
{
Console.WriteLine("事件開始");
//6.拋出事件,給所有相應者
ClickEvent(this, null);
}
}
}
7.引用類別實體化
public MyButton myButton = new MyButton();
8.事件實體化,註冊事件
myButton.ClickEvent += new ClickEventHandler(MyButton_Click);
9.使用方式
private void Form1_Load(object sender, EventArgs e)
{
//引用
Form1 form = new Form1();
form.myButton.Click();
}
範例下載:C#.NET 委派事件用法.rar
沒有留言:
張貼留言