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;
        }
021732191295538.png

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替換即可            
        }
021738469365264.png

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();          
        }
031016108864799.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容