C# WINFORM通过委托和事件窗体间(跨窗体)传值(自定义事件参数)--实例详解
在C# WINFORM的日常开发中,我们通常需要遇到跨窗体传值这一问题,实现的方式也是有很多的,今天给大家分享一种通过委托和事件来实现的传值方式。不多说废话,我将用一个具体的实例来跟大家说明怎么样利用很委托和事件以及自定义的参数来实现跨窗体传值。
例如:程序中我们有一个主窗体,其中文本框的值是我们需要从另外一个窗体中获取的,如图:
在这个表单窗体中,填写完整联系人地址信息后,我们希望把这些信息回传到主窗体中,如图:
最终,我们想让主窗体得到如下的数据:
好了,效果已展示,下面给大家放一下源代码。
首先是赋值窗体,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace DelegatePassValue { public partial class frmAddress : Form { //声明一个更新Address的委托 public delegate void AddressUpdateHandler( object sender, AddressUpdateEventArgs e); //声明一个更新Address的事件 public event AddressUpdateHandler AddressUpdated; public frmAddress() { InitializeComponent(); } private void btnOk_Click( object sender, EventArgs e) { var args = new AddressUpdateEventArgs(txtCountry.Text, txtState.Text, txtCity.Text, txtZipCode.Text); AddressUpdated( this ,args); this .Dispose(); } private void btnCancel_Click( object sender, EventArgs e) { this .Dispose(); } } public class AddressUpdateEventArgs : System.EventArgs { private string mCountry; private string mState; private string mCity; private string mZipCode; public AddressUpdateEventArgs( string sCountry, string sState, string sCity, string sZipCode) { this .mCountry = sCountry; this .mState = sState; this .mCity = sCity; this .mZipCode = sZipCode; } public string Country { get { return mCountry; } } public string State { get { return mState; } } public string City { get { return mCity; } } public string ZipCode { get { return mZipCode; } } } } |
其次,是主窗体(即要取得传递值的窗体),如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace DelegatePassValue { public partial class frmMain : Form { public frmMain() { InitializeComponent(); } private void btnSetAddress_Click( object sender, EventArgs e) { var frmAddr = new frmAddress(); frmAddr.AddressUpdated += new frmAddress.AddressUpdateHandler(AddressForm_ButtonClicked); frmAddr.Show(); } private void AddressForm_ButtonClicked( object sender, AddressUpdateEventArgs e) { txtCountry.Text = e.Country; txtState.Text = e.State; txtCity.Text = e.City; txtZipCode.Text = e.ZipCode; } private void btnClose_Click( object sender, EventArgs e) { Application.Exit(); } } } |
好了,到此本实例--C# WINFORM窗体间通过委托和事件传值(自定义事件参数)的实现就结束了,如果你对本站分享的内容有更好的建议或意见,欢迎给我留言,希望我们共同学习,进步,谢谢。
最后,如果你对本实例程序源码感兴趣,可以点击这里下载
本文本同步发布至网享网[http://2sharings.com]:C# WINFORM窗体间通过委托和事件传值(自定义事件参数)--实例详解
专注.NET开发的爱好者知识社区--【https://codedefault.com】。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端