主窗体给两个父窗体传值,子窗体和子窗体间传值,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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于C语言的系统服务框架.zip
- (源码)基于Spring MVC和MyBatis的选课管理系统.zip
- (源码)基于ArcEngine的GIS数据处理系统.zip
- (源码)基于JavaFX和MySQL的医院挂号管理系统.zip
- (源码)基于IdentityServer4和Finbuckle.MultiTenant的多租户身份认证系统.zip
- (源码)基于Spring Boot和Vue3+ElementPlus的后台管理系统.zip
- (源码)基于C++和Qt框架的dearoot配置管理系统.zip
- (源码)基于 .NET 和 EasyHook 的虚拟文件系统.zip
- (源码)基于Python的金融文档智能分析系统.zip
- (源码)基于Java的医药管理系统.zip