c#實現兩個窗體相互傳值


 

本文轉自:https://mp.csdn.net/postedit/100058721

1、功能展示

有時需要將子界面的內容傳遞到父界面,方法有好幾種。經常用的是通過委托實現。具體的效果如下:

​       

【說明】點擊父界面上“打開子界面”button,則會彈出子界面。父界面與子界面如上圖所示。

​      

【說明】在子界面的textBox框內輸入待返回至父界面的內容,點擊“將內容返回”button,則父界面的textBox將會展示返回的內容。具體如上圖所示

2、代碼分析

里面應用了委托(delegate)和事件(event)。委托就是前端開發中最常用的“回調方法”(callback),event是一種注冊機制,將動作與委托關聯。

為了實現以上功能,首先先編寫子窗體的定義。代碼如下:

 

public partial class Form2 : Form
    {
        //第二步:聲明一個委托類型的事件
        public event setTextValue setFormTextValue;
        
        public Form2()
        {
            InitializeComponent();
        }
 
 
        private void button1_Click(object sender, EventArgs e)
        {
            //第三步:准備相關數據。
            setFormTextValue(this.textBox1.Text);
        }
    }
 
    // 第一步:聲明一個委托。(根據自己的需求)
//注意:該委托必須聲明在命名空間中,而不應該聲明在類中,否則不能調用(新加)
    public delegate void setTextValue(string textValue);

 

  

第一步:先在子窗體中定義一個委托。根據實際需求定義委托

 

第二步:在子窗體中聲明一個event,將委托與動作關聯

第三步:在具體的事件中實現event

以上三步參見Form2的代碼

 

父窗體的代碼如下:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            //第四步:初始化事件
            form2.setFormTextValue += new setTextValue(form2_setFormTextValue);
            form2.Show();
        }
 
        //第五步:實現事件
        int form2_setFormTextValue(string textValue)//改為int,因為如果為void,上面第四步報錯
        {
            //具體實現。
            this.textBox1.Text = textValue;
            return 1;//新加
        }
    }

 

在父窗體的具體實現中分為2步:

 

第四步:在定義子窗體時,聲明子窗體的事件

第五步:實現具體的事件

以上,就是全部的內容

3、功能分析

通過委托的方式,優點:松耦合。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM