C# 窗體間傳值(Form) 幾種方法,我也不懂,能實現功能,先記下來,以后研究...


1、委托

  兩個窗體,窗體很簡單,只實現改變顏色功能,一看就會:

  

  代碼如下,只貼按鈕事件代碼:

  

打開Form2按鈕事件
private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.ChangeColor += new ChangeFormColor(frm2_ChangeColor);
            frm2.Show();
        }

        void frm2_ChangeColor(bool topmost)
        {
            this.BackColor = Color.LightBlue;
            this.Text = "改變成功!";
        }
改變Form1顏色按鈕
     //定義一個委托         
        public delegate void ChangeFormColor(bool topmost); 
        //給一個事件
        public event ChangeFormColor ChangeColor; 
        private void button1_Click(object sender, EventArgs e)
        {
            ChangeColor(true);
            this.Close();
        }

 

2、先截圖來看

修改之后按Confirm,關閉form2,自動刷新form1,思路是這樣:在form1上面查詢顯示到datagridview,右鍵選擇修改,彈出模式窗體form2,修改,關閉,自動刷新form1。

Form1 窗體代碼
            //添加到修改按鈕里面,彈出模式窗體Form2,進行修改
            Form2 form2 = new Form2();
            form2.Owner = this;
            form2.ShowDialog();
Confirm按鈕代碼
if (//你的修改方法)
            {
                MessageBox.Show("修改成功!");
                //把擁有Form2的窗體強制轉換為Form1,然后賦值給Form1窗體類型的變量form1
                Form1 form1 = (Form1)this.Owner;
                //注意下面select()方法,是form1里面的一個查詢方法,作用等於refresh,但refresh不行,無所謂,調用這個方法來刷新一樣的。
                form1.select();
                Close();
            } 

 

3、第三種有點小麻煩,但也不錯(如果修改的數據單一,比較少的話)

兩個窗體的截圖如下(界面很簡單,主要是演示功能,但Form2里用一個按鈕進行數據提交,關閉窗體就不行,必須要寫到FormClosed事件里面,郁悶......誰有更好的方法,一起交流交流):

單擊choose 彈出form2,選擇完性別之后,關閉窗體,數據傳遞到form1sex框中,代碼少,全貼出來吧

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 test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            if (frm2.ShowDialog()==DialogResult.OK)
            {
                //用模式窗體彈出來,給form2里面public屬性的strSex賦值
                textBox2.Text = frm2.strSex;
                frm2 = null;  //清空
            }
        }
    }
}
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 test
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        
        //定義一個private屬性str用於存儲sex,用到什么屬性,就自己加什么屬性,完了把光標停到屬性str這里,按Ctrl+R,E,自動封裝
        private string str;

        public string strSex //這里自動封裝后應該是Str,我改了改名字,表糾結這個
        {
            get { return str; }
            set { str = value; }
        }

        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
            //賦值完之后關閉窗體
            this.strSex = comboBox1.SelectedText;
            this.DialogResult = DialogResult.OK;
        }
    }
}

 

OK,寫完了,這個主要是給自己做做筆記,便於以后翻閱,各位看就看,不看就閃,如果有什么不對的地方,還請指出來,不要JJWW,鄙視這種人!我也是初學者,誰不是從這里過來的!!!

轉載請注明出處:http://www.cnblogs.com/xw-yanger/archive/2012/06/26/2563562.html

有問題就發郵件:Xw_yanger@163.com

大家共同進步!


免責聲明!

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



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