[英]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.