日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中委托与事件的使用-以Winform中跨窗体传值为例

發布時間:2025/3/19 C# 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中跨窗体传值为例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。