C# Winform 自定义事件实战

在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: 运行和调试

运行你的应用程序,点击按钮以触发温度更新,观察标签是否正确显示了温度超过阈值的消息。

在实际项目中,你可能会有更复杂的事件和事件参数,但基本原理是一样的。

相关推荐

  1. C# Winform 定义事件实战

    2024-07-13 07:06:02       22 阅读
  2. Qt 实战(6)事件 | 6.3、定义事件

    2024-07-13 07:06:02       24 阅读
  3. Vue定义事件

    2024-07-13 07:06:02       46 阅读
  4. 【Vue 定义事件

    2024-07-13 07:06:02       31 阅读
  5. qt定义事件过滤器

    2024-07-13 07:06:02       27 阅读
  6. wpf 定义 一个事件聚合定义示例

    2024-07-13 07:06:02       20 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 07:06:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 07:06:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 07:06:02       57 阅读
  4. Python语言-面向对象

    2024-07-13 07:06:02       68 阅读

热门阅读

  1. Linux RTL8111/8168/8411 不能联网

    2024-07-13 07:06:02       23 阅读
  2. 图论基础概念(详细讲解)

    2024-07-13 07:06:02       22 阅读
  3. ARFoundation系列讲解 - 94 Immersal 简介

    2024-07-13 07:06:02       23 阅读
  4. Knife4j的原理及应用详解(一)

    2024-07-13 07:06:02       21 阅读
  5. Linux Vim基础教程

    2024-07-13 07:06:02       24 阅读
  6. 在Qt C++项目中调用7z API实现压缩和解压

    2024-07-13 07:06:02       16 阅读
  7. 详解C#委托与事件

    2024-07-13 07:06:02       27 阅读
  8. 在Spring Boot项目中集成监控与报警

    2024-07-13 07:06:02       27 阅读
  9. 第二讲 数据结构

    2024-07-13 07:06:02       21 阅读
  10. 11网络层-分组转发算法

    2024-07-13 07:06:02       27 阅读
  11. MySQL与Redis优化

    2024-07-13 07:06:02       24 阅读
  12. C++中的RTTI(运行时类型识别)的定义

    2024-07-13 07:06:02       26 阅读
  13. 「字符串匹配算法 1/3」朴素和Rabin-Karp

    2024-07-13 07:06:02       27 阅读