主窗体给两个父窗体传值,子窗体和子窗体间传值,Action搞定,比较简单的demo
在Windows应用程序开发中,尤其是使用.NET Framework的C#或Visual Basic .NET时,窗口之间的数据传递是一个常见的需求。本文将详细讲解如何通过Action实现主窗体与子窗体以及子窗体之间的值传递。 让我们理解“Action”在.NET中的含义。Action是System.Action委托类型,它代表一个不返回任何值的方法。我们可以使用Action来传递参数,并在需要的时候执行这个方法。在窗口之间传递数据时,Action可以作为一个中介,帮助我们将数据从一个窗口传递到另一个窗口。 **一、主窗体给两个子窗体传值** 1. **创建委托和事件:** 在主窗体中定义一个Action委托,用于传递数据,同时创建一个事件,当需要传递数据时触发该事件。 ```csharp public delegate void PassValueAction(object sender, string value); public event PassValueAction PassValueToChild; ``` 2. **触发事件并传递值:** 当需要向子窗体传递值时,触发事件并附带要传递的值。 ```csharp private void Button_Click(object sender, EventArgs e) { string valueToPass = "这是要传递的值"; PassValueToChild?.Invoke(this, valueToPass); } ``` 3. **订阅事件:** 子窗体需要接收值时,在其构造函数中订阅主窗体的事件。 ```csharp public ChildForm1(MainForm mainForm) { InitializeComponent(); mainForm.PassValueToChild += MainForm_PassValue; } private void MainForm_PassValue(object sender, string value) { // 在这里处理接收到的值 MessageBox.Show("从主窗体接收到的值:" + value); } ``` 同样地,为第二个子窗体重复上述步骤。 **二、子窗体传值给另一个子窗体** 子窗体之间传值的过程与上述类似,但不需要依赖主窗体。可以直接定义一个内部的Action或者使用事件进行通信。 1. **定义内部Action:** 在子窗体中定义一个内部的Action委托。 ```csharp private Action<string> PassValueBetweenChildren; ``` 2. **设置Action:** 在需要接收值的子窗体中,提供一个方法来设置Action。 ```csharp public void SetPassValueAction(Action<string> action) { PassValueBetweenChildren = action; } ``` 3. **触发Action:** 当子窗体A需要向子窗体B传递值时,调用Action。 ```csharp private void Button_Click(object sender, EventArgs e) { string valueToPass = "这是子窗体间的传递值"; PassValueBetweenChildren?.Invoke(valueToPass); } ``` 4. **订阅Action:** 在子窗体B中,调用子窗体A的SetPassValueAction方法来订阅Action。 ```csharp private ChildFormA childFormA; public ChildFormB() { InitializeComponent(); childFormA = new ChildFormA(); childFormA.SetPassValueAction(ValueReceivedFromChildA); } private void ValueReceivedFromChildA(string value) { MessageBox.Show("从子窗体A接收到的值:" + value); } ``` 通过这种方式,你可以灵活地在不同的窗口之间传递数据,无论是从主窗体到子窗体,还是在子窗体之间。在实际开发中,确保数据的安全性,避免未授权的访问,并根据项目需求选择最适合的通信方式。以上就是关于窗体间相互传值的基本概念和实现方法,希望对你有所帮助。
- 1
- 粉丝: 13
- 资源: 54
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 云计算,搭建分布式,然后实现Titantic数据集训练、分类的的代码
- 同城宠物照看-JAVA-基于Spring Boot的同城宠物照看系统的设计与实现(毕业论文)
- 云计算,实现中文字频统计代码,课程设计
- weixin138社区互助养老+ssm(论文+源码)-kaic.zip
- 扶贫助农系统-JAVA-基于spring boot扶贫助农系统设计与实现(毕业论文)
- 母婴护理知识共享-JAVA-基于SpringBoot+vue 的母婴护理知识共享系统(毕业论文)
- 番茄叶片图像病害多标签分类,约5600张数据
- 影音互动科普网站-JAVA-基于SpringBoot的哈利波特书影音互动科普网站设计与实现(毕业论文)
- 航空散货调度-JAVA-基于SpringBoot的航空散货调度系统设计与实现(毕业论文)
- 基于Python Scrapy的贝壳找房爬虫程序
- zigbee CC2530无线自组网协议栈实现一个协调器+多个终端的通讯及控制.zip
- 校园二手物品交易-JAVA-基于springBoot的校园二手物品交易系统的设计与实现(毕业论文)
- 计算机视觉项目:Swin-Transformer 【tiny、small、base】模型实现的图像识别项目:番茄病害图像分类
- 功能完善的电商数据智能爬虫采集系统项目全套技术资料.zip
- 青少年心理健康教育网-JAVA-基于springboot的青少年心理健康教育网站的设计与实现(毕业论文)
- 密评流程及商密应用方案解析