【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模型为…...
如何用开源工具G-Helper实现华硕笔记本硬件控制的全面优化?
如何用开源工具G-Helper实现华硕笔记本硬件控制的全面优化? 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项…...
从零构建大模型?斯坦福CS336爆火课程带你闯关,附超全学习资源包!
文章介绍了斯坦福大学CS336《从零开始构建语言模型》课程,该课程借鉴操作系统课程理念,带领学生体验语言模型创建的各个环节,包括数据收集、模型构建、训练和评估。课程内容实践性强,需要较多学习开发时间,适合有一定基…...
打开软件就弹出D3DCompiler_47.dll错误 免费下载修复方法分享
在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…...
嵌入式Linux开发板CH340驱动安装避坑指南(附详细步骤图)
嵌入式Linux开发板CH340驱动安装全流程解析与疑难排错 第一次接触嵌入式Linux开发板时,最让人头疼的往往不是代码编写,而是最基础的开发环境搭建。作为连接电脑与开发板的重要桥梁,CH340串口驱动的安装质量直接决定了后续调试效率。许多初学者…...
新手零踩坑!微信搜一搜排名优化8大干货,14天轻松冲进前10
很多新手运营者都有一个共同的困惑:明明做了公众号、小程序,也发了不少内容,可在微信搜一搜里搜相关关键词,却始终找不到自己的账号和内容,排名一直徘徊在百名之外,精准流量根本引不进来,更别提…...
Qwen3-14B私有化部署成本分析:一张显卡就能跑,中小企业也玩得转
Qwen3-14B私有化部署成本分析:一张显卡就能跑,中小企业也玩得转 1. 为什么中小企业需要关注Qwen3-14B 在AI技术快速发展的今天,大型语言模型已成为企业数字化转型的重要工具。然而,高昂的部署成本往往让中小企业望而却步。Qwen3…...
原神抽卡数据分析工具:智能解析与可视化全攻略
原神抽卡数据分析工具:智能解析与可视化全攻略 【免费下载链接】genshin-wish-export biuuu/genshin-wish-export - 一个使用Electron制作的原神祈愿记录导出工具,它可以通过读取游戏日志或代理模式获取访问游戏祈愿记录API所需的authKey。 项目地址: …...
UnrealPakViewer实战指南:解决Pak文件解析难题的5个创新方法
UnrealPakViewer实战指南:解决Pak文件解析难题的5个创新方法 【免费下载链接】UnrealPakViewer 查看 UE4 Pak 文件的图形化工具,支持 UE4 pak/ucas 文件 项目地址: https://gitcode.com/gh_mirrors/un/UnrealPakViewer 当你面对10GB加密Pak包&…...
别再只会用Levenshtein了!手把手带你实现更灵活的字符串扩展距离算法
超越Levenshtein:构建可定制化字符串扩展距离算法的工程实践 字符串相似度计算在代码版本控制、生物信息学等领域有着广泛应用。传统Levenshtein距离算法虽然经典,但在处理特定场景时显得力不从心——比如DNA序列比对中空格插入代价不同,或是…...
逆向分析实战:从IDA反编译看bjdctf_2020_babystack的栈溢出漏洞成因与利用
逆向工程实战:bjdctf_2020_babystack栈溢出漏洞的深度解析 在二进制安全领域,栈溢出漏洞始终是攻防对抗的经典课题。今天我们将以bjdctf_2020_babystack这道CTF题目为案例,通过IDA Pro的静态分析视角,完整还原从漏洞发现到利用的…...
