【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模型为…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...
