欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

基礎(chǔ)篇

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

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

我們在主窗體中,實例化類,并進行事件綁定,看看能不能獲取到傳遞的數(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()+";浮點值:"
+args.FloatValue.ToString());
    }
}

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

進階篇

 在上面知識掌握的基礎(chǔ)上,我們可以做進一步優(yōu)化,在定義事件時,可以不用EventHandler,可以自己定義參數(shù)來實現(xiàn),我們再創(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進行強制轉(zhuǎn)換,代碼如下:

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

高級篇

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

///<summary>
/// 傳遞參數(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)建一個類——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)用并進行事件處理,代碼如下:

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

運行結(jié)果如下:

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

相關(guān)文章

  • C#清除字符串內(nèi)空格的方法

    C#清除字符串內(nèi)空格的方法

    這篇文章主要介紹了C#清除字符串內(nèi)空格的方法,是C#操作字符串非常實用的技巧,需要的朋友可以參考下
    2014-10-10
  • C#實現(xiàn)windows form倒計時的方法

    C#實現(xiàn)windows form倒計時的方法

    這篇文章主要介紹了C#實現(xiàn)windows form倒計時的方法,涉及C#桌面程序設(shè)計中時間操作的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Unity接入百度AI實現(xiàn)通用物體和場景識別

    Unity接入百度AI實現(xiàn)通用物體和場景識別

    這篇文章主要介紹了在Unity中接入百度AI接口,從而實現(xiàn)通用物體和場景的識別,其中接口返回大類及細分類的名稱,并支持獲取識別結(jié)果對應(yīng)的百科信息。感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • C#實現(xiàn)的微信網(wǎng)頁授權(quán)操作邏輯封裝示例

    C#實現(xiàn)的微信網(wǎng)頁授權(quán)操作邏輯封裝示例

    這篇文章主要介紹了C#實現(xiàn)的微信網(wǎng)頁授權(quán)操作邏輯封裝,分析了微信網(wǎng)頁授權(quán)操作的原理、步驟并給出了C#實現(xiàn)的網(wǎng)頁授權(quán)操作邏輯封裝類,需要的朋友可以參考下
    2016-10-10
  • C#實現(xiàn)繪制隨機噪點和直線

    C#實現(xiàn)繪制隨機噪點和直線

    這篇文章主要為大家詳細介紹了C#如何實現(xiàn)繪制隨機噪點和直線,文中的示例代碼講解詳細,對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • C#實現(xiàn)影院售票系統(tǒng)

    C#實現(xiàn)影院售票系統(tǒng)

    這篇文章主要為大家詳細介紹了C#實現(xiàn)影院售票系統(tǒng),解析了售票系統(tǒng)的難點,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • c# 9.0新特性nint和Pattern matching的使用方法

    c# 9.0新特性nint和Pattern matching的使用方法

    這篇文章主要介紹了c# 9.0新特性nint和Pattern matching的使用方法,文中講解非常細致,幫助你更好的學(xué)習(xí)c# 9.0,有需求的朋友可以參考下
    2020-06-06
  • C#中WPF內(nèi)存回收與釋放LierdaCracker的實現(xiàn)

    C#中WPF內(nèi)存回收與釋放LierdaCracker的實現(xiàn)

    本文主要介紹了C#中WPF內(nèi)存回收與釋放LierdaCracker的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C#實現(xiàn)數(shù)字字符串左補零的六種方式技巧

    C#實現(xiàn)數(shù)字字符串左補零的六種方式技巧

    在編程旅程中,常常會遇到需要將數(shù)字字符串左補齊 0 的情況,這種格式化需求在實際開發(fā)中相當(dāng)普遍,在 C# 中,實現(xiàn)數(shù)字字符串左補齊 0 主要有這 6 種方法,我們一起來看看吧,需要的朋友可以參考下
    2024-12-12
  • C#中PuppeteerSharp庫的應(yīng)用詳解

    C#中PuppeteerSharp庫的應(yīng)用詳解

    PuppeteerSharp是一個針對Google Chrome瀏覽器的高級API庫,這篇文章主要為大家詳細介紹了PuppeteerSharp庫在C#中的具體應(yīng)用,需要的小伙伴可以了解下
    2024-01-01

最新評論