程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#子窗口與父窗口交互(使用委托和事件)

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

編輯: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;
        }
    }
}

 

實驗效果:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved