标签:
目标:在子窗口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;
????????}
????}
}
?
?
标签:
原文地址:http://www.cnblogs.com/lhyqzx/p/5404315.html