【Winform学习笔记(八)】通过委托实现跨窗体传值
通过委托实现跨窗体传值
- 前言
- 正文
- 1、委托及事件
- 2、通过委托实现跨窗体传值的步骤
- 1.在子窗体中定义委托
- 2.在子窗体中声明一个委托类型的事件
- 3.调用委托类型事件
- 4.在实例化子窗体后,子窗体订阅事件接受方法
- 5.实现具体的事件
- 3、具体示例
- 4、完整代码
- 5、实现效果
前言
在本文中主要介绍 如何通过委托实现跨窗体传值,并以简单的示例进行展示。
正文
1、委托及事件
- 委托:委托是方法的抽象,与类一样是一种用户自定义类型,存储的是一系列具有相同签名和返回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行;
- 委托类型声明:委托是类型,与类class 处于同一个级别,委托类型必须在被用来创建变量之前声明:a、以deleagate关键字开头 b、返回类型+委托类型名+参数列表(可以为空):修饰符 delegate 返回类型 委托类型名(参数列表)
- 委托与方法的区别:委托只是一个命令,做事情的是方法,在代码世界中委托只是存储了各个方法的地址,而它自己是什么也不做的;
- 委托的开发步骤:a、定义一个委托 b、定义一个委托类型的变量 c、给委托赋值(绑定方法) d、调用委托;
- 事件:事件是基于委托的,为委托提供一个订阅或发布的机制;事件是一种特殊的委托,调用事件和委托是一样的;
- 事件声明:事件可以被看作是委托类型的一个变量,通过事件注册、取消多个委托和方法;修饰符 event 委托类型 事件名称;
2、通过委托实现跨窗体传值的步骤
1.在子窗体中定义委托
public delegate void 委托类型名(参数列表);
2.在子窗体中声明一个委托类型的事件
public event 委托类型名 事件名称;
3.调用委托类型事件
private void button1_Click(object sender, EventArgs e){事件名称(参数列表);}
4.在实例化子窗体后,子窗体订阅事件接受方法
private void button2_Click(object sender, EventArgs e){f2 = new Form2();f2.Show();f2.事件名称 += new Form2.委托类型名(方法名);}
5.实现具体的事件
public void 方法名(参数列表){具体方法}
3、具体示例
-
在子窗体中定义定义一个委托,委托类型名为SendValue,需要传递2个参数
//1、先在子窗体中定义一个委托,根据实际需求定义委托;这个SendValue委托中需要传递2个参数public delegate void SendValue(int a,int b); -
在子窗体中声明一个委托类型的事件,委托类型为SendValue,事件名称为SendVauleEvent
//2、在子窗体中声明一个委托类型的事件,将委托与事件相关联public event SendValue SendVauleEvent; -
在button1的Click事件中,调用委托类型事件SendVauleEvent
private void button1_Click(object sender, EventArgs e){//3、调用(实现)委托类型事件,并传递相关参数SendVauleEvent(1, 5);} -
在实例化子窗体后,子窗体订阅事件接受方法,相当于子窗体委托主窗体做了一个事情
private void button2_Click(object sender, EventArgs e){//实例化窗体2f2 = new Form2();f2.Show();//4、在实例化子窗体后,声明子窗体的事件,即初始化事件//子窗体订阅事件接受方法,相当于子窗体委托主窗体做了一个事情f2.SendVauleEvent += new Form2.SendValue(Add);//接受的方法 :Add} -
实现具体的事件Add(),实现简单的加法运算
/// <summary>/// 5、实现具体的事件,定义一个方法/// </summary>/// <param name="a">参数1</param>/// <param name="b">参数2</param>public void Add(int a,int b){label1.Text = (a + b).ToString();}
4、完整代码
-
主窗体代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace DelegatePractice {public partial class Form1 : Form{public Form2 f2;public Form1(){InitializeComponent();///跨界面传值///1、主界面处理只需要实例化其他界面即可///2、在需要的界面申明委托和事件///3、在主界面订阅事件和接受方法即可}/// <summary>/// 5、实现具体的事件,定义一个方法/// </summary>/// <param name="a">参数1</param>/// <param name="b">参数2</param>public void Add(int a,int b){label1.Text = (a + b).ToString();}private void button2_Click(object sender, EventArgs e){//实例化窗体2f2 = new Form2();f2.Show();//4、在实例化子窗体后,声明子窗体的事件,即初始化事件//子窗体订阅事件接受方法,相当于子窗体委托主窗体做了一个事情f2.SendVauleEvent += new Form2.SendValue(Add);//接受的方法 :Add}private void button1_Click(object sender, EventArgs e){Add(1, 2);}} } -
子窗体代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace DelegatePractice {public partial class Form2 : Form{public Form2(){InitializeComponent();}//1、先在子窗体中定义一个委托,根据实际需求定义委托;这个SendValue委托中需要传递2个参数public delegate void SendValue(int a,int b);//2、在子窗体中声明一个委托类型的事件,将委托与事件相关联public event SendValue SendVauleEvent;private void button1_Click(object sender, EventArgs e){//3、调用(实现)委托类型事件,并传递相关参数SendVauleEvent(1, 5);}} }
5、实现效果

相关文章:
【Winform学习笔记(八)】通过委托实现跨窗体传值
通过委托实现跨窗体传值 前言正文1、委托及事件2、通过委托实现跨窗体传值的步骤1.在子窗体中定义委托2.在子窗体中声明一个委托类型的事件3.调用委托类型事件4.在实例化子窗体后,子窗体订阅事件接受方法5.实现具体的事件 3、具体示例4、完整代码5、实现效果 前言 …...
Windows用户如何安装Cpolar
目录 概述 什么是cpolar? cpolar可以用在哪些场景? 1. 注册cpolar帐号 1.1 访问官网站点 2. 下载Windows版本cpolar客户端 2.1 下载并安装 2.2 安装完验证 3. token认证 3.1 将token值保存到默认的配置文件中 3.2 创建一个随机url隧道&#x…...
C++最易读手撸神经网络两隐藏层(任意Nodes每层)梯度下降230820a
这是史上最简单、清晰,最易读的…… C语言编写的 带正向传播、反向传播(Forward ……和Back Propagation)……任意Nodes数的人工神经元神经网络……。 大一学生、甚至中学生可以读懂。 适合于,没学过高数的程序员……照猫画虎编写人工智能、…...
机器学习理论笔记(二):数据集划分以及模型选择
文章目录 1 前言2 经验误差与过拟合3 训练集与测试集的划分方法3.1 留出法(Hold-out)3.2 交叉验证法(Cross Validation)3.3 自助法(Bootstrap) 4 调参与最终模型5 结语 1 前言 欢迎来到蓝色是天的机器学习…...
10*1000【2】
知识: -----------金融科技背后的技术---------------- -------------三个数字化趋势 1.数据爆炸:internet of everything(iot);实时贡献数据;公有云服务->提供了灵活的计算和存储。 2.由计算能力驱动的&#x…...
“探秘JS加密算法:MD5、Base64、DES/AES、RSA你都知道吗?”
目录 1、什么是JS、JS反爬是什么?JS逆向是什么? 2、JS逆向的大致流程 3、逆向的环境搭建 3.1、安装node.js 3.2、安装js代码调试工具(vscode) 3.3、安装PyExecJs模块 4、JS常见加密算法 4.1、Base64算法 4.2、MD5算法 4.3、DES/AES算法 4.2.2 AES与DES的…...
Spark项目Java和Scala混合打包编译
文章目录 项目结构Pom完整文件编译查看 实际开发用有时候引用自己写的一些java工具类,但是整个项目是scala开发的spark程序,在项目打包时需要考虑到java和scala混合在一起编译。 今天看到之前很久之前写的一些打包编译文章,发现很多地方不太对…...
深度学习处理文本(NLP)
文章目录 引言1. 反向传播1.1 实例流程实现1.2 前向传播1.3 计算损失1.4 反向传播误差1.5 更新权重1.6 迭代1.7 BackPropagation & Adam 代码实例 2. 优化器 -- Adam2.1 Adam解析2.2 代码实例 3. NLP任务4. 神经网络处理文本4.1 step1 字符数值化4.2 step 2 矩阵转化为向量…...
汽车电子笔记之:AUTOSAR方法论及基础概念
目录 1、AUTOSAR方法论 2、AUTOSAR的BSW 2.1、MCAL 2.2、ECU抽象层 2.3、服务层 2.4、复杂驱动 3、AUTOSAR的RTE 4、AUTOSAR的应用层 4.1、SWC 4.2、AUTOSAR的通信 4.3、AUTOSAR软件接口 1、AUTOSAR方法论 AUTOSAR为汽车电子软件系统开发过程定义了一套通用的技术方法…...
鼠标拖拽盒子移动
目录 需求思路代码页面展示【补充】纯js实现 需求 浮动的盒子添加鼠标拖拽功能 思路 给需要拖动的盒子添加鼠标按下事件鼠标按下后获取鼠标点击位置与盒子边缘的距离给 document 添加鼠标移动事件鼠标移动过程中,将盒子的位置进行重新定位侦听 document 鼠标弹起&a…...
AUTOSAR从入门到精通-【应用篇】面向车联网的车辆攻击方法及入侵检测
目录 前言 国内外研究现状 (1)车辆攻击方法的研究 (2)车辆安全防护技术的研究...
0101prox-shardingsphere-中间件
1 启动ShardingSphere-Proxy 1.1 获取 目前 ShardingSphere-Proxy 提供了 3 种获取方式: 二进制发布包DockerHelm 这里我们使用Docker安装。 1.2 使用Docker安装 step1:启动Docker容器 docker run -d \ -v /Users/gaogzhen/data/docker/shardings…...
FactoryBean和BeanFactory:Spring IOC容器的两个重要角色简介
目录 一、简介 二、BeanFactory 三、FactoryBean 四、区别 五、使用场景 总结 一、简介 在Spring框架中,IOC(Inversion of Control)容器是一个核心组件,它负责管理和配置Java对象及其依赖关系,实现了控制反转&a…...
微服务中间件--分布式搜索ES
分布式搜索ES 11.分布式搜索 ESa.介绍ESb.IK分词器c.索引库操作 (类似于MYSQL的Table)d.查看、删除、修改 索引库e.文档操作 (类似MYSQL的数据)1) 添加文档2) 查看文档3) 删除文档4) 修改文档 f.RestClient操作索引库1) 创建索引库2) 删除索引库/判断索引库 g.RestClient操作文…...
触摸屏与PLC之间 EtherNet/IP无线以太网通信
在实际系统中,同一个车间里分布多台PLC,用触摸屏集中控制。通常所有设备距离在几十米到上百米不等。在有通讯需求的时候,如果布线的话,工程量较大耽误工期,这种情况下比较适合采用无线通信方式。 本方案以MCGS触摸屏和…...
Crontab定时任务运行Docker容器(Ubuntu 20)
对于一些离线预测任务,或者D1天的预测任务,可以简单地采用Crontab做定时调用项目代码运行项目 Crontab简介: Linux crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令&…...
Fegin异步情况丢失上下文问题
在微服务的开发中,我们经常需要服务之间的调用,并且为了提高效率使用异步的方式进行服务之间的调用,在这种异步的调用情况下会有一个严重的问题,丢失上文下 通过以上图片可以看出异步丢失上下文的原因是不在同一个线程,…...
《Linux从练气到飞升》No.17 进程创建
🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…...
python + pyside2,pyside6,运行错误
在visual studio code运行pyside的时候报错 qt.qpa.plugin: Could not find the Qt platform plugin “windows“ in 后来发现在cmd命令行可以正常运行,应该是VScode和虚拟机类似的问题。 额外设置一下环境变量就可以了。 执行print(os.path.dirname(PySide6.__f…...
第60步 深度学习图像识别:误判病例分析(Pytorch)
基于WIN10的64位系统演示 一、写在前面 上期内容基于Tensorflow环境做了误判病例分析(传送门),考虑到不少模型在Tensorflow环境没有迁移学习的预训练模型,因此有必要在Pytorch环境也搞搞误判病例分析。 本期以SqueezeNet模型为…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
