在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
目标:在子窗口Form2上单击按钮时向Form1传递一组自定义参数,并显示在父窗口Form1上。 方法:有很多方法,这里只介绍委托和事件的实现方式。 思路:Form2中定义事件,Form1创建Form2并订阅事件;Form2触发事件后传递参数到Form1,Form1处理参数。
Form1代码如下: 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 FormDataInteractive { /// <summary> /// powered by shadu {at} foxmail.com /// </summary> public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { // 创建Form2,并添加事件处理函数 Form2 frm = new Form2(); frm.DataChange += new Form2.DataChangeHandler(DataChanged); frm.ShowDialog(); }
public void DataChanged(object sender, DataChangeEventArgs args) { // 更新窗体控件 textBox1.Text = args.name; textBox2.Text = args.pass; } } }
Form2代码如下: 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 FormDataInteractive { public partial class Form2 : Form { // 定义委托 // public delegate void DataChangeHandler(string x); 一次可以传递一个string public delegate void DataChangeHandler(object sender, DataChangeEventArgs args); // 声明事件 public event DataChangeHandler DataChange;
// 调用事件函数 public void OnDataChange(object sender, DataChangeEventArgs args) { if (DataChange != null) { DataChange(this, args); } }
public Form2() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { // 触发事件, 传递自定义参数 OnDataChange(this, new DataChangeEventArgs(textBox1.Text, textBox2.Text)); } }
/// <summary> /// 自定义事件参数类型,根据需要可设定多种参数便于传递 /// </summary> public class DataChangeEventArgs : EventArgs { public string name { get; set; } public string pass { get; set; } public DataChangeEventArgs(string s1, string s2) { name = s1; pass = s2; } } }
|
请发表评论