• 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;

            }

        }

    }

     

     

  • 相关阅读:
    【随感】我真的很敬重你,只是你不知道。。。。。
    【diary】智慧的贪婪
    【随感】看老科和当当的回眸相视
    【转载】清华毕业致辞:从容行走于无人知晓的荒原,欣赏并创造别样的风景
    【随感】不要以为自己不足轻重而放任自己做一些事或一些话。你的不在意,才会影响到别人也不在意你。
    【随感】我觉得,世界上最美好的乐器是钢琴和架子鼓
    【技术】HTML5 canvas clock(1)
    【随感】youngLaker,fighting!
    转发公司招聘
    DBCC DBREINDEX
  • 原文地址:https://www.cnblogs.com/lhyqzx/p/5404315.html
Copyright © 2020-2023  润新知