[转]幾種WinForm的Form與Form之間的傳值方法

寫WinForm的程式,使用Form與Form之間的傳值方式並不少見,但從WebForm跳來寫WinForm的,可能就會搞不清楚WinForm的做法,所以這個問題也被常常拿出來,所以這邊大概列了幾種做法供參考.

 

1. 在Form1輸入值,在開啟Form2時,顯示Form2的值,而Form2關閉後,將Form2的值帶回Form1.

Form2

public Form2()
{
    InitializeComponent();
}

public Form2(string strTextMsg)
{
    InitializeComponent();
    textBox1.Text = strTextMsg;
}

public string TextBoxMsg
{
    set
    {
        textBox1.Text = value;
    }
    get
    {
        return textBox1.Text;
    }
}

Form1

方式1

Form2 obj = new Form2();
obj.TextBoxMsg = textBox1.Text;//把form1的值設定到form2
if (obj.ShowDialog() == DialogResult.OK)
{
    this.textBox1.Text = obj.TextBoxMsg;//從form2取值設定到form1
}

方式2

Form2 obj = new Form2(textBox1.Text);//把Form1的值給到Form2
if (obj.ShowDialog() == DialogResult.OK)
{
    this.textBox1.Text = obj.TextBoxMsg; //從Form2取值並顯示到Form1
}

2. 在Form2沒有關閉的情況下,Form2對Form1傳值與執行Form1的Function

Form2

public Form2(Form1 Parentform)//Parent Form
{
    InitializeComponent();
    this.Tag = Parentform;
}

private void button1_Click(object sender, EventArgs e)
{
    ((Form1)this.Tag).setTextBoxMsg = textBox1.Text;//傳值設定Form1的TextBox
    ((Form1)this.Tag).DoSomething("From Child");//執行Form1的Function
}

Form1

private void button4_Click(object sender, EventArgs e)
{
    Form2 obj = new Form2(this);
    obj.ShowDialog();
}

public string setTextBoxMsg
{
    set
    {
        textBox1.Text = value;
    }
}

public void DoSomething(string Msg)
{
    MessageBox.Show(Msg);
}

3. 同樣是Form1取Form2的值,不過做法是直接將Control的Modifiers可見層級提升.

Form2

以這個例子來說,Modifiers設為Internal.

internal System.Windows.Forms.TextBox textBox1;

Form1

Form2 obj = new Form2();
obj.ShowDialog();
textBox1.Text = obj.textBox1.Text;//這裡就可以直接拿Form2來用,所以Text屬性當然也能取得.

4. MDI的各Form互相傳值.

 MDI Form Container

Form2 f2 = new Form2();
f2.MdiParent = this;
f2.Show();
Form3 f3 = new Form3();
f3.MdiParent = this;
f3.Show();

MDI Clild Form Form2 傳值給同樣是MDI Child Form的Form3

Form2

Form[] aryf = this.Parent.FindForm().MdiChildren;
foreach (Form f in aryf)
{
    if (f.Name == "Form3")
    {
        ((Form3)f).TextBoxMsg = textBox1.Text; ;
        break;
    }
}

Form3

public string TextBoxMsg
{
    set
    {
        textBox1.Text = value;
    }
    get
    {
        return textBox1.Text;
    }
}

MDI Form2設定Parent Container的Text

this.Parent.FindForm().Text = textBox1.Text;

 

源代码下载:https://files.cnblogs.com/kingwin/WinForm%E7%9A%84Form%E8%88%87Form%E4%B9%8B%E9%96%93%E7%9A%84%E5%82%B3%E5%80%BC%E6%96%B9%E6%B3%95.rar

posted on 2012-12-21 16:39  binbr  阅读(274)  评论(0)    收藏  举报

导航