当前位置: 首页 > news >正文

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

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

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

相关文章:

C# Winform 自定义事件实战

在C#的WinForms中&#xff0c;自定义事件是一种强大的工具&#xff0c;它允许你创建自己的事件&#xff0c;从而在特定条件下通知订阅者。自定义事件通常用于封装业务逻辑&#xff0c;使代码更加模块化和易于维护。下面我将通过一个实战例子来展示如何在WinForms中创建和使用自…...

Python通过继承实现多线程

本套课在线学习视频&#xff08;网盘地址&#xff0c;保存到网盘即可免费观看&#xff09;&#xff1a; ​​https://pan.quark.cn/s/677661ea63b3​​ 本节将介绍如何利用Python中的thread模块和threading模块实现多线程&#xff0c;并通过继承threading.Thread类并重写run方…...

记一次项目经历

一、项目需求 1、设备四个工位&#xff0c;每个工位需要测试产品的电参数&#xff1b; 2、每个另外加四个位置温度&#xff1b; 3、显示4个通道电流曲线&#xff0c;16个通道温度曲线&#xff1b; 4、可切换工艺参数&#xff1b; 5、常规判定&#xff0c;测试数据保存到表格内&…...

Elasticsearch 8 支持别名查询

在 Elasticsearch 8 中&#xff0c;使用 Java 高级 REST 客户端进行别名管理的过程与之前的版本类似&#xff0c;但有一些API细节上的变化。以下是如何使用 Java 和 Elasticsearch 8 进行别名操作的例子&#xff1a; 引入依赖 确保你的项目中包含了 Elasticsearch 的高级 RES…...

【Spring Cloud】 使用Eureka实现服务注册与服务发现

文章目录 &#x1f343;前言&#x1f38d;解决方案&#x1f6a9;关于注册中⼼&#x1f6a9;CAP理论&#x1f6a9;常见的注册中心 &#x1f384;Eureka&#x1f6a9;搭建 Eureka Server&#x1f388;创建Eureka-server ⼦模块&#x1f388;引入依赖&#x1f388;项目构建插件&am…...

JDK安装详细教程(以JDK17为例)

一、JDK的下载 1. 前往oracle官网下载JDK Java Archive Downloads - Java SE 17 在这里选择对应的JDK版本&#xff0c;我这里就直接选择JDK17的版本了。 然后下载对应的软件包&#xff0c;我这里采用的是Windows的安装程序。 点击上述圈起来的链接即可下载安装包&#xff0c;…...

安装nodejs | npm报错

nodejs安装步骤: 官网&#xff1a;https://nodejs.org/en/ 在官网下载nodejs: 双击下载下来的msi安装包&#xff0c;一直点next&#xff0c;我选的安装目录是默认的: 测试是否安装成功&#xff1a; 输入cmd打开命令提示符&#xff0c;输入node -v可以看到版本&#xff0c;说…...

聊点基础---Java和.NET开发技术异同全方位分析

1. C#语言基础 1.1 C#语法概览 欢迎来到C#的世界&#xff01;对于刚从Java转过来的开发者来说&#xff0c;你会发现C#和Java有很多相似之处&#xff0c;但C#也有其独特的魅力和强大之处。让我们一起来探索C#的基本语法&#xff0c;并比较一下与Java的异同。 程序结构 C#程序…...

【C++】C++中SDKDDKVer.h和WinSDKVer.h函数库详解

目录 一.SDKDDKVer.h介绍 二.WinSDKVer.h介绍 三.WinSDKVer.h 和 SDKDDKVer.h 的区别 一.SDKDDKVer.h介绍 SDKDDKVer.h 是一个在 Windows 软件开发中常见的头文件&#xff0c;它用于定义软件开发工具包&#xff08;SDK&#xff09;和驱动开发工具包&#xff08;DDK&…...

uni-app 蓝牙传输

https://www.cnblogs.com/ckfuture/p/16450418.html https://www.cnblogs.com/yangxiaobai123/p/16021058.html 字符串转base64&#xff1a;https://www.cnblogs.com/sunny3158/p/17312158.html 将 ArrayBuffer 对象转成 Base64 字符串&#xff1a;基础 - uni.arrayBufferT…...

MBR10200CT-ASEMI智能AI应用MBR10200CT

编辑&#xff1a;ll MBR10200CT-ASEMI智能AI应用MBR10200CT 型号&#xff1a;MBR10200CT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220 批号&#xff1a;最新 恢复时间&#xff1a;35ns 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;10A 最大循环峰值反向…...

力扣 爬楼梯

动态规划算法基础篇。 class Solution {public int climbStairs(int n) {int[] f new int[n 1];f[0] 1;f[1] 1;//当爬到n阶楼梯时&#xff0c;可知是由n-1阶或n-2阶楼梯而来for(int i 2; i < n; i) {f[i] f[i - 1] f[i - 2];//后面的每一阶种数由前两个状态得到}ret…...

java设计模式之:策略模式+工厂模式整合案例实战(一)

本文介绍项目中常用的策略模式工厂模式的案例&#xff0c;该案例是针对策略类比较少的情况&#xff1b;下一篇会讲解策略类比较多的案例&#xff0c;下面直接开始&#xff1a; 案例1&#xff1a;项目中对系统中的客户和销售进行事件通知(短信、邮件、钉钉) 首先要有通知的策略…...

国内Ubuntu安装 stable-diffusion教程,换成国内镜像

安装依赖&#xff1a; 首先更新系统并安装Python 3.10和pip&#xff1a; sudo apt update sudo apt install python3.10 python3-pip 设置Python虚拟环境&#xff08;可选&#xff09;&#xff1a; 安装Python虚拟环境管理工具&#xff0c;并创建激活虚拟环境&#xff1a; su…...

JAVA final详细介绍

一、介绍 final 中文意思: 最后的,最终的. final 可以修饰类、属性、方法和局部变量, 在某些情况下,程序员可能有以下需求&#xff0c;就会使用到final&#xff1a; 1&#xff09;当不希望类被继承时,可以用final修饰。 //如果我们要求A类不能被其他类继承 //可以使用fin…...

45、tomcat+课后实验

tomcat 1、tomcat tomcat和php一样&#xff0c;都是用来处理动态页面的。 tomcat也可以作为web应用服务器&#xff0c;开源的。 php .php tomcat .jsp nginx .html tomcat 是用Java代码写的程序&#xff0c;运行的是Java的web应用程序。 tomcat的特点和功能&#xff1a…...

设计模式的七大原则

1.单一职责原则 单一职责原则(Single responsibility principle)&#xff0c;即一个类应该只负责一项职责。如类A负责两个不同职责&#xff1a;职责1&#xff0c;职责2。当职责1需求变更而改变A时&#xff0c;可能造成职责2执行错误&#xff0c;所以需要将类A的粒度分解为A1、…...

ThreeJS-3D教学十五:ShaderMaterial(noise、random)

ThreeJS-3D教学十四:ShaderMaterial(length、fract、step) 上面这篇主要是操作 fragmentShader 片元着色器,实现对物体颜色的修改,这次咱们来看下修改 vertexShader 顶点着色器,这个其实就是位移各个顶点的位置。 接下来我们先介绍下 noise 噪声函数(Perlin Noise、Sim…...

LeetCode 2974.最小数字游戏:排序+交换奇偶位

【LetMeFly】2974.最小数字游戏&#xff1a;排序交换奇偶位 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-number-game/ 你有一个下标从 0 开始、长度为 偶数 的整数数组 nums &#xff0c;同时还有一个空数组 arr 。Alice 和 Bob 决定玩一个游戏&#xff…...

使用vllIm部署大语言模型

使用vllm部署大语言模型一般需要以下步骤&#xff1a; 一、准备工作 1. 系统要求 - 操作系统&#xff1a;常见的 Linux 发行版&#xff08;如 Ubuntu、CentOS&#xff09;或 Windows&#xff08;通过 WSL&#xff09;。 - GPU 支持&#xff1a;NVIDIA GPU 并安装了适当的驱动程…...

3步掌握Umi-OCR批量处理:从海量图片中高效提取文字

3步掌握Umi-OCR批量处理&#xff1a;从海量图片中高效提取文字 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件&#xff0c;适用于Windows系统&#xff0c;支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/GitHub_…...

AI人脸隐私卫士企业应用:内部会议纪要人脸自动打码方案

AI人脸隐私卫士企业应用&#xff1a;内部会议纪要人脸自动打码方案 1. 企业会议场景的隐私保护挑战 在现代企业运营中&#xff0c;内部会议纪要的数字化管理已成为常态。然而&#xff0c;当这些包含参会人员影像的资料需要共享或存档时&#xff0c;如何平衡信息传递与隐私保护…...

cat-catch:构建智能化媒体资源捕获的浏览器扩展解决方案

cat-catch&#xff1a;构建智能化媒体资源捕获的浏览器扩展解决方案 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch cat-catch是一款专注于网页媒体资源智能捕获的浏览器扩展工具&#xff0c;通过深度…...

LangChain4j向量化实战避坑:OpenAI、本地模型、Qdrant选哪个?我的踩坑记录

LangChain4j向量化实战避坑指南&#xff1a;OpenAI、本地模型与Qdrant的深度抉择 当Java开发者尝试构建基于大语言模型的应用时&#xff0c;LangChain4j框架中的向量化组件往往成为技术栈选型的第一个分水岭。我在三个实际项目中分别尝试了不同组合方案后&#xff0c;发现每个…...

麒麟V10 x86_64系统下Qt 5.12.7安装全攻略(附常见报错解决方案)

麒麟V10 x86_64系统Qt 5.12.7深度安装指南与疑难攻坚 国产操作系统生态的崛起让越来越多的开发者开始关注麒麟平台。作为一款基于Linux的国产操作系统&#xff0c;麒麟V10在x86_64架构下的表现尤为出色。本文将带你全面掌握Qt 5.12.7在麒麟V10 x86_64系统上的安装与配置技巧&am…...

3分钟快速上手:text-generation-webui大模型本地部署完全指南

3分钟快速上手&#xff1a;text-generation-webui大模型本地部署完全指南 【免费下载链接】text-generation-webui A Gradio web UI for Large Language Models. Supports transformers, GPTQ, AWQ, EXL2, llama.cpp (GGUF), Llama models. 项目地址: https://gitcode.com/Gi…...

别再手动点点点了!用Python脚本自动化调用Dify工作流API(附完整代码)

用Python脚本实现Dify工作流API的自动化调用与生产级实践 在数据处理和AI应用开发中&#xff0c;手动操作Web界面不仅效率低下&#xff0c;也难以应对批量任务的需求。本文将介绍如何通过Python脚本将Dify工作流API封装为可复用的自动化工具&#xff0c;并分享生产环境中常见的…...

嘎嘎降AI退款申请完整流程:不达标怎么拿回费用的具体步骤

嘎嘎降AI退款申请完整流程&#xff1a;不达标怎么拿回费用的具体步骤 这篇教程来自实操经验。帮三个同学处理过论文AI率&#xff0c;加上自己的&#xff0c;前后操作了十几次。把流程总结成教程&#xff0c;尽量详细。 核心工具推荐嘎嘎降AI&#xff08;www.aigcleaner.com&a…...

贝叶斯分位数回归实战指南:从理论到业务落地

贝叶斯分位数回归实战指南&#xff1a;从理论到业务落地 【免费下载链接】pymc Python 中的贝叶斯建模和概率编程。 项目地址: https://gitcode.com/GitHub_Trending/py/pymc 在数据科学实践中&#xff0c;我们常面临这样的困境&#xff1a;当预测用户行为、设备故障时间…...

5个实用技巧:让你的微信自动化工具真正发挥价值

5个实用技巧&#xff1a;让你的微信自动化工具真正发挥价值 【免费下载链接】wxauto Windows版本微信客户端&#xff08;非网页版&#xff09;自动化&#xff0c;可实现简单的发送、接收微信消息&#xff0c;简单微信机器人 项目地址: https://gitcode.com/gh_mirrors/wx/wxa…...