码迷,mamicode.com
首页 > Windows程序 > 详细

C#子窗口与父窗口交互(使用委托和事件)

时间:2016-04-18 15:40:52      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:

目标:在子窗口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;

????????}

????}

}

?

?

C#子窗口与父窗口交互(使用委托和事件)

标签:

原文地址:http://www.cnblogs.com/lhyqzx/p/5404315.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!