首页 / WINFORM / 正文

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

75723 2 4评论 发布于: 2014-02-04 读完约需9分钟

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

下载后解压即可。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

下一篇: SQL 读取txt文件

本文永久链接码友网 » C# WINFORM窗体间通过委托和事件传值(自定义事件参数)--实例详解

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册

热门评论

Guest (2017-02-20 23:00)

学习了~~~~~
回复 赞(2)

Jermy (2015-09-01 15:33)

支持一下!!!
回复 赞(1)

xxoo (2015-02-02 11:01)

nice~~~
回复 赞(0)

ACER (2014-12-09 21:54)

很好的关于C#委托和事件的例子,以前看过很多这方面的示例。这个是最易懂的,32个赞!!! :smile:
回复 赞(2)