在C#的WinForms中,自定義事件是一種強大的工具,它允許你創建自己的事件,從而在特定條件下通知訂閱者。自定義事件通常用于封裝業務邏輯,使代碼更加模塊化和易于維護。下面我將通過一個實戰例子來展示如何在WinForms中創建和使用自定義事件。
步驟1: 創建事件源類
首先,我們創建一個類,這個類將負責觸發我們的自定義事件。在這個例子中,我們將創建一個簡單的溫度監測器類,當溫度超過閾值時,它會觸發一個事件。
Csharp
1public class TemperatureMonitor
2{
3 // 定義事件處理器,使用EventHandler<TEventArgs>,其中TEventArgs是事件參數類型
4 public event EventHandler<TemperatureChangedEventArgs> TemperatureChanged;
5
6 private double currentTemperature;
7
8 public TemperatureMonitor(double initialTemperature)
9 {
10 currentTemperature = initialTemperature;
11 }
12
13 // 模擬溫度變化
14 public void UpdateTemperature(double temperature)
15 {
16 currentTemperature = temperature;
17 if (currentTemperature > 30)
18 {
19 // 觸發事件
20 OnTemperatureChanged(new TemperatureChangedEventArgs(currentTemperature));
21 }
22 }
23
24 // 內部方法,用于觸發事件
25 protected virtual void OnTemperatureChanged(TemperatureChangedEventArgs e)
26 {
27 TemperatureChanged?.Invoke(this, e);
28 }
29}
30
31// 定義事件參數類
32public class TemperatureChangedEventArgs : EventArgs
33{
34 public double Temperature { get; }
35
36 public TemperatureChangedEventArgs(double temperature)
37 {
38 Temperature = temperature;
39 }
40}
步驟2: 創建事件監聽器
接下來,我們創建一個WinForms窗體,這個窗體會監聽溫度變化事件,并在事件發生時更新UI。
Csharp
1public partial class MainForm : Form
2{
3 private TemperatureMonitor monitor;
4
5 public MainForm()
6 {
7 InitializeComponent();
8 monitor = new TemperatureMonitor(25);
9 monitor.TemperatureChanged += Monitor_TemperatureChanged;
10 }
11
12 private void Monitor_TemperatureChanged(object sender, TemperatureChangedEventArgs e)
13 {
14 // 更新UI
15 this.Invoke((MethodInvoker)delegate
16 {
17 labelTemperature.Text = $"Current Temperature: {e.Temperature}°C";
18 });
19 }
20
21 private void buttonUpdate_Click(object sender, EventArgs e)
22 {
23 // 模擬溫度更新
24 monitor.UpdateTemperature(32);
25 }
26}
步驟3: 測試事件
在你的主窗體上放置一個按鈕和一個標簽,然后連接事件處理函數。當按鈕被點擊時,模擬溫度的更新,觸發事件,然后在標簽上顯示新的溫度值。
步驟4: 運行和調試
運行你的應用程序,點擊按鈕以觸發溫度更新,觀察標簽是否正確顯示了溫度超過閾值的消息。
在實際項目中,你可能會有更復雜的事件和事件參數,但基本原理是一樣的。