C#开发如何Winform实现窗体间相互传值
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,今天小编给大家分享一下C#开发如何Winform实现窗体间相互传值的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获
千家信息网最后更新 2025年11月07日C#开发如何Winform实现窗体间相互传值
今天小编给大家分享一下C#开发如何Winform实现窗体间相互传值的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
一、前言
我们在做Winform窗体程序开发的时候,会经常遇到窗体之间相互传值。假设有下面的一个场景:一个主窗体和一个子窗体,点击主窗体上面的按钮给子窗体传值,并在子窗体上面显示出来,一般会有如下几种方式实现。
二、公共属性
我们可以在子窗体里面定义一个公共的属性,然后在父窗体里面给公共属性赋值,这样可以实现窗体之间传值,子窗体代码如下:
using System;using System.Windows.Forms;namespace DelegateDemo{ public partial class frmChild : Form { public frmChild() { InitializeComponent(); } // 定义一个公共属性,接收传递的值 public string strMessage { get; set; } /// /// 窗体加载 /// /// /// private void frmChild_Load(object sender, EventArgs e) { // 将接收到的值显示在窗体上 this.lblMessage.Text = strMessage; } }}父窗体代码:
using System;using System.Windows.Forms;namespace DelegateDemo{ public partial class frmParent : Form { public frmParent() { InitializeComponent(); } /// /// 单击事件 /// /// /// private void btn_Value_Click(object sender, EventArgs e) { frmChild child = new frmChild(); // 给窗体的公共属性赋值 child.strMessage = this.txtMessage.Text.Trim(); // 显示子窗体 child.Show(); } }}这种方式有一个缺点:属性需要设置为public,不安全。
三、公共方法
我们还可以在子窗体里面定义一个方法,通过调用方法传值,子窗体代码如下:
using System;using System.Windows.Forms;namespace DelegateDemo{ public partial class frmChild : Form { public frmChild() { InitializeComponent(); } // 定义一个公共属性,接收传递的值 //public string strMessage { get; set; } // 定义属性为private private string strMessage { get; set; } /// /// 给私有属性赋值 /// /// public void SetText(string strText) { strMessage = strText; } /// /// 窗体加载 /// /// /// private void frmChild_Load(object sender, EventArgs e) { // 将接收到的值显示在窗体上 this.lblMessage.Text = strMessage; } }}父窗体代码:
using System;using System.Windows.Forms;namespace DelegateDemo{ public partial class frmParent : Form { public frmParent() { InitializeComponent(); } /// /// 单击事件 /// /// /// private void btn_Value_Click(object sender, EventArgs e) { #region 调用公共属性赋值 //frmChild child = new frmChild(); //// 给窗体的公共属性赋值 //child.strMessage = this.txtMessage.Text.Trim(); //// 显示子窗体 //child.Show(); #endregion #region 调用方法赋值 frmChild child = new frmChild(); // 给窗体的公共属性赋值 child.SetText(this.txtMessage.Text.Trim()); // 显示子窗体 child.Show(); #endregion } }}这种方式同样也有缺点:属性虽然是private的了,但是方法还是public的。
四、委托
上述两种方式都是不安全,下面我们使用委托来实现窗体之间传值。
1、定义一个委托
我们在主窗体里面定义一个有参无返回值的委托:
// 定义一个有参无返回值的委托private delegate void SendMessage(string strMessage);
2、实例化一个此委托类型的事件
在父窗体里面定义一个委托类型的事件:
// 定义一个委托类型的事件public event SendMessage sendMessageEvent;
委托与事件的关系,事件相对于委托更安全,更低耦合。委托是一个类型,事件是委托类型的一个实例。
3、定义要执行的方法
这里其实就是在子窗体里面定义一个给控件赋值的方法:
////// 给控件赋值的方法/// /// public void SetValue(string strValue){ this.lblMessage.Text = strValue;}
4、将方法绑定到事件
frmChild child = new frmChild();// 将方法绑定到事件上sendMessageEvent += new SendMessage(child.SetValue);// 也可以使用下面的简写形式// sendMessageEvent += child.SetValue;child.Show();
5、触发委托
在按钮的点击事件里面触发委托:
if(sendMessageEvent!=null){ sendMessageEvent.Invoke(this.txtMessage.Text.Trim());}上面的代码中使用的是自定义的委托,我们也可以使用.Net 框架里面自带的Action泛型委托:
using System;using System.Windows.Forms;namespace DelegateDemo{ public partial class frmParent : Form { // 定义一个有参无返回值的委托 public delegate void SendMessage(string strMessage); // 定义一个委托类型的事件 public event SendMessage sendMessageEvent; public event Action actionEvent; public frmParent() { InitializeComponent(); } /// /// 单击事件 /// /// /// private void btn_Value_Click(object sender, EventArgs e) { #region 调用公共属性赋值 //frmChild child = new frmChild(); //// 给窗体的公共属性赋值 //child.strMessage = this.txtMessage.Text.Trim(); //// 显示子窗体 //child.Show(); #endregion #region 调用方法赋值 //frmChild child = new frmChild(); //// 给窗体的公共属性赋值 //child.SetText(this.txtMessage.Text.Trim()); //// 显示子窗体 //child.Show(); #endregion #region 通过委托传值 //frmChild child = new frmChild(); //// 将方法绑定到事件上 //// sendMessageEvent += new SendMessage(child.SetValue); //// 也可以使用下面的简写形式 //sendMessageEvent += child.SetValue; //child.Show(); #endregion #region 使用Action frmChild child = new frmChild(); // 将方法绑定到事件上 actionEvent += child.SetValue; child.Show(); #endregion // 使用自定义委托 //if (sendMessageEvent!=null) //{ // sendMessageEvent.Invoke(this.txtMessage.Text.Trim()); //} // 使用Action委托 if (actionEvent != null) { actionEvent.Invoke(this.txtMessage.Text.Trim()); } } }} 以上就是"C#开发如何Winform实现窗体间相互传值"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。
窗体
委托
事件
属性
方法
类型
面的
代码
方式
知识
篇文章
开发
安全
之间
C#
内容
实例
就是
形式
按钮
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术基础名词解释基带传输
新密r740服务器价格
答题卡下载软件开发
浙江云主机品牌服务器
网络安全实操题
2台服务器如何实现并行计算
tcga数据库常用在线分析工具
自然资源部网络安全主任
梦幻 转服务器
幻塔哪里有不同的服务器
还原学生成绩数据库步骤
2017软件开发项目
数据库表达式含义
上海亿宝网络技术
数据库管理er图
数据库实时打印日志文件
sql数据库l整形变量的是
服务器led93指示灯亮起
高安全数据库
学院网络安全主题班会总结
u8系统总是提示卸载不到数据库
网络安全与执法跨专业考研
浏览器服务器系统是什么意思
软件开发经理薪资待遇
云数据库安全技术教科书
虹口区本地网络技术采购信息
智能语音服务器供货费用
收信服务器英文
鸿蒙网络技术
网络安全和物联网的融合