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

C#如何在自定義事件里傳遞自定義數據

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

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

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

基礎篇

通過EventArgs來實現傳值,我們首先需要創(chuàng)建一個類,繼承EventArgs,我們可以將需要傳遞的數據,直接在類里面定義成屬性,這里以傳遞一個布爾、一個浮點數為例,代碼如下所示:

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

然后我們創(chuàng)建一個類,類里面創(chuàng)建一個事件,并激發(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;
}

我們在主窗體中,實例化類,并進行事件綁定,看看能不能獲取到傳遞的數據,代碼如下:

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()+";浮點值:"
+args.FloatValue.ToString());
    }
}

運行結果如下所示:

進階篇

 在上面知識掌握的基礎上,我們可以做進一步優(yōu)化,在定義事件時,可以不用EventHandler,可以自己定義參數來實現,我們再創(chuàng)建一個類——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;
}

這樣我們在事件處理中,就可以直接獲取屬性了,而不需要對EventArgs進行強制轉換,代碼如下:

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

高級篇

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

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

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

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


再創(chuàng)建一個類——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;
}

    

主窗體調用并進行事件處理,代碼如下:

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);
}

運行結果如下:

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

相關文章

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

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

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

    WPF實現動態(tài)加載圖片瀏覽器

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

    webBrowser執(zhí)行js的方法,并返回值,c#后臺取值的實現

    下面小編就為大家?guī)硪黄獁ebBrowser執(zhí)行js的方法,并返回值,c#后臺取值的實現。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • 淺談C#中的委托、事件與異步

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

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

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

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

    C#中的依賴注入Dependency Injection DI的實現步驟

    在C#中依賴注入是一種實現控制反轉的設計模式,用于解耦組件依賴關系,下面就來介紹一下依賴注入的實現步驟,具有一定的參考價值,感興趣的可以了解一下
    2025-06-06
  • C#單例類的實現方法

    C#單例類的實現方法

    這篇文章主要介紹了C#單例類的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • HttpWebRequest實現下載圖片至本地

    HttpWebRequest實現下載圖片至本地

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

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

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

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

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

最新評論

美姑县| 启东市| 青神县| 章丘市| 京山县| 安徽省| 永靖县| 崇信县| 江津市| 清涧县| 交口县| 旌德县| 临西县| 济南市| 从江县| 桓台县| 墨江| 黄平县| 合阳县| 延津县| 溧水县| 涿鹿县| 广南县| 遂川县| 南平市| 九寨沟县| 临海市| 天台县| 祥云县| 台中市| 南靖县| 葵青区| 沾化县| 论坛| 确山县| 通道| 柳林县| 东海县| 桦川县| 枣阳市| 上杭县|