Winform開發之窗體傳值


Winform的窗體之間的數據傳遞是開發的必備技術,下面介紹幾種典型的傳值方法

1、構造函數傳值,但這種方法是單向的(推薦)

上代碼,先傳值

 private void button2_Click(object sender, EventArgs e)
        {
            Form3 fr3 = new Form3("要傳的值啊");
            fr3.ShowDialog();
        }

接值,對了,這里需要重載一個Form3的構造函數,然后將拿到的值顯示出來

 public Form3(string canshu)
        {
            InitializeComponent();
            label1.Text = canshu;
        }

效果圖,就是這么簡單

2、靜態變量傳值(不推薦)

可以將靜態變量申明在你需要的地方,比如一個單獨類,或者Form中,比如我們在這里申明在Form2中

 public static string xvalue;
private void button2_Click(object sender, EventArgs e)
        {
            xvalue = "要傳的值啊xvalue";
            Form3 fr3 = new Form3();
            fr3.ShowDialog();
        }

先給賦值,然后在Form3中取值

 public Form3()
        {
            InitializeComponent();
            label1.Text = Form2.xvalue;//Form2實際也是個class,直接取靜態值即可,如果靜態變量xvalue定義在其他類中,即將Form2替換即可            
        }

效果圖上

3、通過共有屬性傳值

首先在要打開的Form中創建一個共有屬性,然后在調用窗口賦值即可。比如下面Form2啟動Form3,即給Form3的yvalue傳值

(1)在Form3中定義共有屬性

public string yvalue {
            get 
            {
                return label1.Text.ToString();
            }
            set 
            {
                label1.Text = value;
            }
        }

(2)Form2中啟動Form3,並傳值

 private void button2_Click(object sender, EventArgs e)
        {           
            Form3 fr3 = new Form3();
            fr3.yvalue = "要傳的值啊";
            fr3.ShowDialog();
        }

4、通過Owner屬性傳值

(1)在調用者Form2中申明一個公有變量,並賦值,設置需要啟動的Form3的Owner

 public string xvalue;
        private void button2_Click(object sender, EventArgs e)
        {
            xvalue = "Form2要傳的值";
            Form3 fr3 = new Form3();
            fr3.Owner = this;
            fr3.ShowDialog();
        }

(2)啟動窗體Form3中取值

 private void Form3_Load(object sender, EventArgs e)
        {
            Form2 fr2 = (Form2)this.Owner;
            label1.Text = fr2.xvalue;
        }

這種方法實際是將Form2傳給了Form3,因此Form3可以取到Form2的所有公有變量和屬性。

5、委托傳值(推薦)

委托傳值主要用在子窗體給父窗體傳值上,即上文的Form3給Form2傳值

(1)先在Form3中申明委托

 public delegate void PutHandler(string text);
        public PutHandler putTextHandler;//委托對象
        private void button1_Click(object sender, EventArgs e)
        {
            if (putTextHandler != null)
            {
                putTextHandler(textBox1.Text.ToString());
            }
        }

(2)在Form2中綁定委托事件

 public void getValue(string strV)
          {
             this.textBox1.Text = strV;
         }
       
        private void button1_Click(object sender, EventArgs e)
        {
            Form3 fr3 = new Form3();
            fr3.putTextHandler = getValue;
            fr3.ShowDialog();          
        }

效果圖

當然還有其他的傳值方式,又興趣的朋友可以再研究。


免責聲明!

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



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