C# Winform傳遞參數

C# Winform傳遞參數

1.構造函數傳參。即重載第二個窗體的構造函數,把需要傳的參數寫入第二個窗體的構造函數。

Form1

    private void button1_Click(object sender, EventArgs e)
    {
        string txt = this.textBox1.Text;
        Form2 frm = new Form2(txt);//帶入構造函數
        frm.Show();
    }

Form2

    public partial class Form2 : Form
    {
        private string TxtVal = null;//上一窗體帶過來的值
        public Form2(string txt) //重載構造函數
        {
            this.TxtVal = txt;//獲取傳過來的值
            InitializeComponent();

            //顯示,用於測試
            ShowPara();
        }

        public Form2()
        {
            InitializeComponent();
        }

        public void ShowPara()
        {
            this.label1.Text = this.TxtVal;
        }
    }

2. 全局變量傳參數。即 第二個窗體通過獲取第一個窗體的全局變量的值。來達到傳參的目的。

Form1

    public static string TxtVal = "";//公共的靜態變量。可以不示例就訪問。
    private void button2_Click(object sender, EventArgs e)
    {
        TxtVal = this.textBox1.Text;
        Form3 frm = new Form3();
        frm.Show();
    }

Form3

    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
            ShowPara();
        }

        public void ShowPara()
        {
            this.label1.Text = Form1.TxtVal;
        }
    }

3.通過事件來傳參數,這種方式的好處是可以使解耦兩個form之間的關聯。

先定義一箇中間模塊(Observer類庫),用來處理兩個FORM中關係。

namespace Observer
{
    /// <summary>
    /// 定義一個信息委託
    /// </summary>
    /// <param name="sender">發佈者</param>
    /// <param name="msg">發送內容</param>
    public delegate void MsgDlg(object sender,object msg);

    public class MidModule
    {
        /// <summary>
        /// 消息發送事件
        /// </summary>
        public static event MsgDlg EventSend;


        public static void SendMessage(object sender, object msg)
        {
            if (EventSend != null)//
            {
                EventSend(sender, msg);
            }
        }
    }

}

Form1

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string txt=this.textBox1.Text;
            Form2 frm = new Form2();
            frm.Show();

            MidModule.SendMessage(this, txt);//發送參數值
        }
    }

Form2

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();

            //訂閱了信息發送事件,即接受參數值
           MidModule.EventSend+=new MsgDlg(MidModule_EventSend);
        }

       //接受參數後的具體實現
        private void MidModule_EventSend(object sender, object msg)
        {
            if (sender != null)
            {
                this.label1.Text = msg.ToString();
            }
        }
        
    }

參考文章:
https://www.cnblogs.com/xinjian/archive/2011/09/15/2177851.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章