簡體   English   中英

Windows窗體事件訂閱c#

[英]Windows Forms Event Subscription c#

我有一個帶有3個窗口的示例表單。 每個窗口都有一個標簽,主窗體有一個按鈕。

我有一個包含以下代碼的類:

    public class CustomEventArgs : EventArgs
{
    public string Message { get; set; }
    public CustomEventArgs(string message)
    {
        Message = message;
    }
}

public delegate void CustomEventHandler(object sender, CustomEventArgs args);

public class EventCode
{
    public void Process()
    {
        var cea = new CustomEventArgs("I was processed");
        if (MyEvent != null)
        {
            MyEvent.Invoke(this, cea);
        }
    }

    public event CustomEventHandler MyEvent;
}

在我的主窗體上,我將按一下按鈕,讓它在EventCode類中處理代碼,然后調用事件。 我希望事件將消息發送到兩個打開的窗體,然后它們將在屏幕上顯示一條消息。

這是我在Form1中的按鈕單擊代碼:

        private void Form1_Load(object sender, EventArgs e)
    {
        Window1 w1 = new Window1();
        w1.Show();

        Window2 w2 = new Window2();
        w2.Show();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        EventCode ec = new EventCode();
        ec.Process();
    }

在窗口1中:

EventCode ec = new EventCode();
    public Window1()
    {
        InitializeComponent();
        ec.MyEvent += new CustomEventHandler(ec_MyEvent);
    }

    void ec_MyEvent(object sender, CustomEventArgs args)
    {
        label1.Text = args.Message;
    }

對窗口2重復

當我單擊按鈕時,事件訂閱不會在每個表單上顯示文本。 如果我在主窗體上創建事件訂閱,它將顯示。

我不確定要使該功能正常工作應采取的路線。

思考?

訂閱事件僅適用於您訂閱的實例。 如果您創建EventCode的新實例並訂閱事件,則僅當您在該特定實例上調用Process時,才會引發該事件。

快速解決方案:將您在主窗口中創建的EventCode實例傳遞給兩個子窗口。

public Window1(EventCode eventCode)
{
    InitializeComponent();
    eventCode.MyEvent += new CustomEventHandler(ec_MyEvent);
}

void ec_MyEvent(object sender, CustomEventArgs args)
{
    label1.Text = args.Message;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM