運行環境:Window10,.Net7.0; 編者:烏龍哈里 2023-01-13 經常碰到兩個控制項需要相互傳遞消息,這時候需要用到事件。比如現有兩個類如下: class AA { private string Text = "AA"; public void SetText(string s) { ...
運行環境:Window10,.Net7.0; 編者:烏龍哈里 2023-01-13
經常碰到兩個控制項需要相互傳遞消息,這時候需要用到事件。比如現有兩個類如下:
class AA { private string Text = "AA"; public void SetText(string s) { Text = s; } public void Show() { Console.WriteLine(Text); } } class BB { private string Text = "BB"; public void OnClick() { } }
我們需要 BB.OnClick() 後把 AA 的 Text 欄位內容變成 BB.Text 的內容。這時候需要事件。事件按我的理解就是把 AA 的一個方法弄到 BB 內執行。在本文中就是 BB 也能執行 AA.SetText(string s) 這個方法。
在BB類內改造步驟:
1、根據 AA類的方法 void SetText(string s) 在 BB類 中聲明一個代理 public delegate void SetValue(string s);
2、再把代理聲明成事件 public event SetValue SetValueEvent;
3、最後,在 BB 類的 OnClick() 方法中運行事件。
改完的 BB 類如下:
class BB { private string Text = "BB"; public delegate void SetValue(string s); public event SetValue? SetValueEvent; public void OnClick() { if (SetValueEvent != null) { SetValueEvent(Text); } } }
整體運行如下:
var aa = new AA(); var bb = new BB(); aa.Show();//=>輸出:AA //把 BB 的事件綁定到 AA 的 SetText 方法 bb.SetValueEvent += aa.SetText; //運行 BB 調用事件的方法 OnClick() bb.OnClick(); aa.Show();//=>輸出:BB。aa.Text 的內容已經改變成 BB 了