最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#如何在自定義事件里傳遞自定義數(shù)據(jù)

 更新時(shí)間:2024年12月25日 10:06:46   作者:dotNet工控上位機(jī)  
相信很多小伙伴都知道傳值的一些方式,比如構(gòu)造方法傳值,屬性傳值等,這篇文章主要來(lái)給大家分享的另一種方式,通過(guò)自定義事件來(lái)傳值,感興趣的可以了解下

相信很多小伙伴都知道傳值的一些方式,比如構(gòu)造方法傳值、屬性傳值、Tag傳值、委托傳值、窗體傳值等,今天給大家分享的一種方式,是通過(guò)自定義事件來(lái)傳值。

對(duì)于一般的系統(tǒng)事件,是有兩個(gè)參數(shù)的,一個(gè)是sender,一個(gè)是EventArgs,對(duì)于sender,我們可能用得還比較多一些,它表示這個(gè)事件的觸發(fā)者,一般指向的是一個(gè)控件,但是對(duì)于EventArgs,我們一般用得會(huì)比較少,今天分享的自定義事件傳值就是通過(guò)EventArgs來(lái)實(shí)現(xiàn)。

基礎(chǔ)篇

通過(guò)EventArgs來(lái)實(shí)現(xiàn)傳值,我們首先需要?jiǎng)?chuàng)建一個(gè)類,繼承EventArgs,我們可以將需要傳遞的數(shù)據(jù),直接在類里面定義成屬性,這里以傳遞一個(gè)布爾、一個(gè)浮點(diǎn)數(shù)為例,代碼如下所示:

public class MyEventArgs : EventArgs{
    public bool BoolValue { get; set; }
    public float FloatValue { get; set; }
}

然后我們創(chuàng)建一個(gè)類,類里面創(chuàng)建一個(gè)事件,并激發(fā)事件,這里傳遞的值為True和123.0,代碼如下:

public class Test{
    public void AckEvent()
    {
        //激發(fā)事件
        myEvent?.Invoke(this, new MyEventArgs()
        {
                BoolValue = true,
                FloatValue =123.0f
        }):
    }
    //創(chuàng)建事件
    public event EventHandler myEvent;
}

我們?cè)谥鞔绑w中,實(shí)例化類,并進(jìn)行事件綁定,看看能不能獲取到傳遞的數(shù)據(jù),代碼如下:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        
        t= new Test();
        t.myEvent +=T myEvent;
        t.AckEvent();
    }
    
    Test t;
    
    private void T_myEvent(object sender, EventArgs e)
    {
        MyEventArgs args = e as MyEventArgs;
        
        MessageBox.Show("布爾值:"+args.BoolValue.ToString()+";浮點(diǎn)值:"
+args.FloatValue.ToString());
    }
}

運(yùn)行結(jié)果如下所示:

進(jìn)階篇

 在上面知識(shí)掌握的基礎(chǔ)上,我們可以做進(jìn)一步優(yōu)化,在定義事件時(shí),可以不用EventHandler,可以自己定義參數(shù)來(lái)實(shí)現(xiàn),我們?cè)賱?chuàng)建一個(gè)類——Test2,代碼如下:

public class Test2
{
    public void AckEvent()
    {
        //激發(fā)事件
        myEvent?.Invoke(this,new MyEventArgs()
        {
            BoolValue = true,
            FloatValue =123.0f
            
        });
    }
    //創(chuàng)建事件
    public event Action<object, MyEventArgs> myEvent;
}

這樣我們?cè)谑录幚碇?,就可以直接獲取屬性了,而不需要對(duì)EventArgs進(jìn)行強(qiáng)制轉(zhuǎn)換,代碼如下:

private void T2 myEvent(object arg1, MyEventArgs arg2)
{
    MessageBox.Show("布爾值:"+ arg2.BoolValue.ToString()+";浮點(diǎn)值:"
    + arg2.FloatValue.ToString());
}

高級(jí)篇

如果繼續(xù)深入的話,我們可以將傳遞的參數(shù)改成泛型,這樣就可以輕松傳遞單個(gè)參數(shù)了,對(duì)于多個(gè)參數(shù)的情形,我們可以使用對(duì)象,單一參數(shù)比較簡(jiǎn)單,這里就不贅述了,主要針對(duì)對(duì)象傳遞進(jìn)行說(shuō)明,首先創(chuàng)建一個(gè)參數(shù)實(shí)體類,這里創(chuàng)建三個(gè)屬性,代碼如下:

///<summary>
/// 傳遞參數(shù)實(shí)體類
/// </summary>
public class Param
{
    public string Param1 { get; set; }
    public string Param2 { get; set; }
    public string Param3 { get; set; }
}

創(chuàng)建事件參數(shù)類,代碼如下:

///<summary>
/// 事件參數(shù)類
/// </summary>
/// <typeparam name="T"></typeparam>
public class MyTEventArgs<T>:EventArgs
{
    public MyTEventArgs(T t)
    {
        Param =t;
    }
    
    public T Param;
}


再創(chuàng)建一個(gè)類——Test3,代碼如下:

public class Test3
{
    public void AckEvent()
    {
        //激發(fā)事件
        myEvent?.Invoke(this, new MyTEventArgs<Param>(new Param()
        {
            Param1 = "1",
            Param2 = "2",
            Param3 = "3",
        }));
    }
    
    //創(chuàng)建事件
    public event Action<object, MyTEventArgs<Param>> myEvent;
}

    

主窗體調(diào)用并進(jìn)行事件處理,代碼如下:

public Form()
{
    InitializeComponent();
    
    t3 = new Test3();
    t3.myEvent +=T3 myEvent;
    t3.AckEvent();
}

private void T3_myEvent(object arg1, MyTEventArgs<Param> arg2)
{
    var data = arg2.Param;
    
    MessageBox.Show("值1:"+ data.Param1 +";值2:"+ data.Param2 +
    ";值3:"+ data.Param3);
}

運(yùn)行結(jié)果如下:

到此這篇關(guān)于C#如何在自定義事件里傳遞自定義數(shù)據(jù)的文章就介紹到這了,更多相關(guān)C#自定義事件傳遞自定義數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細(xì)介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • WPF實(shí)現(xiàn)動(dòng)態(tài)加載圖片瀏覽器

    WPF實(shí)現(xiàn)動(dòng)態(tài)加載圖片瀏覽器

    這篇文章主要為大家詳細(xì)介紹了一種?WPF?+?Prism?實(shí)現(xiàn)動(dòng)態(tài)分頁(yè)加載圖片的方法,其中結(jié)合了ScrollViewer滾動(dòng)條觸底檢測(cè),實(shí)現(xiàn)邊滾動(dòng)邊加載的流暢體驗(yàn),下面就跟隨小編一起學(xué)習(xí)一下吧
    2025-04-04
  • webBrowser執(zhí)行js的方法,并返回值,c#后臺(tái)取值的實(shí)現(xiàn)

    webBrowser執(zhí)行js的方法,并返回值,c#后臺(tái)取值的實(shí)現(xiàn)

    下面小編就為大家?guī)?lái)一篇webBrowser執(zhí)行js的方法,并返回值,c#后臺(tái)取值的實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • 淺談C#中的委托、事件與異步

    淺談C#中的委托、事件與異步

    本文主要介紹了C#中的委托、事件與異步的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • C#操作讀取、寫入XML文檔的實(shí)用方法

    C#操作讀取、寫入XML文檔的實(shí)用方法

    這篇文章主要介紹了C#操作讀取、寫入XML文檔的實(shí)用方法,即即用.NET本身提供的Deserialize和Serialize進(jìn)行反序列化和序列化XML文檔,感興趣的小伙伴們可以參考一下
    2016-04-04
  • C#中的依賴注入Dependency Injection DI的實(shí)現(xiàn)步驟

    C#中的依賴注入Dependency Injection DI的實(shí)現(xiàn)步驟

    在C#中依賴注入是一種實(shí)現(xiàn)控制反轉(zhuǎn)的設(shè)計(jì)模式,用于解耦組件依賴關(guān)系,下面就來(lái)介紹一下依賴注入的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-06-06
  • C#單例類的實(shí)現(xiàn)方法

    C#單例類的實(shí)現(xiàn)方法

    這篇文章主要介紹了C#單例類的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • HttpWebRequest實(shí)現(xiàn)下載圖片至本地

    HttpWebRequest實(shí)現(xiàn)下載圖片至本地

    這篇文章主要為大家詳細(xì)介紹了HttpWebRequest實(shí)現(xiàn)下載圖片至本地,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • C#之System.Threading.Lock與lock使用及區(qū)別

    C#之System.Threading.Lock與lock使用及區(qū)別

    本文詳細(xì)比較了C#中傳統(tǒng)lock語(yǔ)句與System.Threading.Lock的異同,涵蓋語(yǔ)法復(fù)雜度、異常處理、超時(shí)控制及性能影響等方面,幫助開發(fā)者選擇合適的同步機(jī)制
    2026-05-05
  • C#操作Excel工作表(添加、刪除、復(fù)制、移動(dòng)、重命名)的完整指南

    C#操作Excel工作表(添加、刪除、復(fù)制、移動(dòng)、重命名)的完整指南

    在日常開發(fā)中,我們經(jīng)常需要對(duì) Excel 文件進(jìn)行各種操作,本文演示如何在 同一個(gè)工作簿內(nèi) 完成多種工作表管理操作,包括添加,刪除,復(fù)制,移動(dòng),重命名以及移動(dòng)工作表,感興趣的小伙伴可以了解下
    2025-09-09

最新評(píng)論

城市| 都昌县| 亳州市| 来宾市| 正镶白旗| 腾冲县| 镇原县| 鹤庆县| 石泉县| 阿坝县| 渭源县| 浏阳市| 青冈县| 金平| 且末县| 台东市| 常宁市| 磴口县| 峨眉山市| 腾冲县| 瓦房店市| 松溪县| 三江| 上思县| 寿阳县| 南岸区| 定陶县| 新昌县| 大姚县| 平谷区| 英德市| 云霄县| 东兰县| 夏河县| 闻喜县| 南靖县| 张家界市| 电白县| 定日县| 甘孜| 从江县|