C#中委托与事件的使用-以Winform中跨窗体传值为例
生活随笔
收集整理的這篇文章主要介紹了
C#中委托与事件的使用-以Winform中跨窗体传值为例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
場景
委托(Delegate)
委托是對存有某個方法的引用的一種引用類型變量。
委托特別用于實現事件和回調方法。
聲明委托
public delegate int MyDelegate (string s);實例化委托
聲明了委托類型,委托對象必須使用new關鍵字來創建,且與一個特定的方法相關。
當創建委托時,傳遞到 new 語句的參數就像方法調用一樣書寫,但是不帶有參數。例如:
public delegate void printString(string s); ... printString ps1 = new printString(WriteToScreen);示例代碼
using System;delegate int NumberChanger(int n); namespace DelegateAppl {class TestDelegate{static int num = 10;public static int AddNum(int p){num += p;return num;}public static int MultNum(int q){num *= q;return num;}public static int getNum(){return num;}static void Main(string[] args){// 創建委托實例NumberChanger nc1 = new NumberChanger(AddNum);NumberChanger nc2 = new NumberChanger(MultNum);// 使用委托對象調用方法nc1(25);Console.WriteLine("Value of Num: {0}", getNum());nc2(5);Console.WriteLine("Value of Num: {0}", getNum());Console.ReadKey();}} }事件
事件在類中聲明且生成,且通過使用同一個類或其他類中的委托與事件處理程序關聯。包含事件的類用于發布事件。這被稱為 發布器(publisher) 類。其他接受該事件的類被稱為 訂閱器(subscriber) 類。事件使用 發布-訂閱(publisher-subscriber) 模型。
發布器(publisher) 是一個包含事件和委托定義的對象。事件和委托之間的聯系也定義在這個對象中。發布器(publisher)類的對象調用這個事件,并通知其他的對象。
訂閱器(subscriber) 是一個接受事件并提供事件處理程序的對象。在發布器(publisher)類中的委托調用訂閱器(subscriber)類中的方法(事件處理程序)。
聲明事件
在類的內部聲明事件嗎,首先必須先聲明該事件的委托類型。
public delegate void BoilerLogHandler(string status);然后聲明事件本身。
public event BoilerLogHandler BoilerEventLog;跨窗體傳值示例
效果
實現
首先在彈窗的窗體CurveCompare中聲明委托
?public delegate void ChangeTextDelegete(string s);然后基于此委托定義事件
?public static event ChangeTextDelegete changeBoxTextEvent;然后是按鈕的具體的點擊事件中的處理
?private void button1_Click(object sender, EventArgs e){string aa = "hello";if(changeBoxTextEvent != null){changeBoxTextEvent(aa);}}完整彈窗窗體代碼
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace ZedGraphTest {public partial class CurveCompare : Form{//委托的定義public delegate void ChangeTextDelegete(string s);//事件聲明public static event ChangeTextDelegete changeBoxTextEvent;public CurveCompare(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){string aa = "hello";if(changeBoxTextEvent != null){changeBoxTextEvent(aa);}}} }然后再到要改變值的窗體中。
在其初始化方法中
?CurveCompare.changeBoxTextEvent += new CurveCompare.ChangeTextDelegete(changeText);然后編寫改變值的方法
?public void changeText(string s){this.textBox1.Text = s;}Form1完整示例代碼
?public partial class Form1 : Form{public Form1(){InitializeComponent();CurveCompare.changeBoxTextEvent += new CurveCompare.ChangeTextDelegete(changeText);}public void changeText(string s){this.textBox1.Text = s;}?
總結
以上是生活随笔為你收集整理的C#中委托与事件的使用-以Winform中跨窗体传值为例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Winform中实现Excel导入、表格
- 下一篇: c# char unsigned_dll