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

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

        }

    }

}

 

 

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