C# WINFORM窗体间通过委托和事件传值(自定义事件参数)--实例详解

本文首发于码友网–《C# WINFORM窗体间通过委托和事件传值(自定义事件参数)–实例详解
cc
在C# WINFORM的日常开发中,我们通常需要遇到跨窗体传值这一问题,实现的方式也是有很多的,今天给大家分享一种通过委托和事件来实现的传值方式。

不多说废话,我将用一个具体的实例来跟大家说明怎么样利用很委托和事件以及自定义的参数来实现跨窗体传值。例如:程序中我们有一个主窗体,其中文本框的值是我们需要从另外一个窗体中获取的,如图:

delegate-event-cross-winform-pass-valuestep-1

在这个表单窗体中,填写完整联系人地址信息后,我们希望把这些信息回传到主窗体中,如图:

delegate-event-cross-winform-pass-valuestep-2

最终,我们想让主窗体得到如下的数据:

delegate-event-cross-winform-pass-valuestep-3

好了,效果已展示,下面给大家放一下源代码。首先是赋值窗体,如下:

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; } }
  }
}

其次,是主窗体(即要取得传递值的窗体),如下:

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窗体间通过委托和事件传值(自定义事件参数)的实现就结束了,如果你对本站分享的内容有更好的建议或意见,欢迎给我留言,希望我们共同学习,进步,谢谢。

最后,如果你对本实例程序源码感兴趣,可以 从以下地址获取:

https://www.aliyundrive.com/s/C2J4fmeKpUD 提取码:9mz1
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码老头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值