zoukankan      html  css  js  c++  java
  • 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;

            }

        }

    }

     

     

  • 相关阅读:
    多浏览器CSS样式解决方法
    CSS基础
    HTML页面——常用模块
    CSS选择器
    li水平与div水平
    天梯题目解答——1012、1430
    天梯题目解答——1205、1075、1083、1160
    HTML5 元素拖动
    div简单水平移动效果
    Matlab代码优化--向量化
  • 原文地址:https://www.cnblogs.com/lhyqzx/p/5404315.html
Copyright © 2011-2022 走看看