自訂搜尋

2010/10/25

C# 子視窗(child form)要使用父視窗(parent form)的變數

印象中我以前好像都是主視窗~
要拿子視窗的物件來用~~~~

或是WEB FORM之間的親子搞來搞去你儂我儂~

卻很少在使用WINFORM的情況下~
新開啟的視窗要使用主視窗的物件~~

摁~仔細想想還真的沒碰過這個問題~

順便筆記一下幾個常見的WINFORM傳值的方法吧~
WEBFORM 的傳值大家應該都很會了XDD

Ex. Form1 A(Main Form) , Form2 B(Child Form)

情況1.

A開B
A要等待B有熱烈的回應才肯繼續>///<

Form1的部分程式碼
Form2 B = new Form2();
B.Text = textBox1.Text;
//或是兩行遍一行Form2 B = new Form2(textBox1.Text);
if (B.ShowDialog() == DialogResult.OK)
{
 this.textBox1.Text = B.Text;
}

Form2的部分程式碼
public Form2()
{
 InitializeComponent();
}

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

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

情況2.

只有A要B~B不要A~
又懶得寫set & get
那就把B的Access Modifiers提升(public protected private internal)
這邊改成internal應該就可以了

Form1的部分程式碼
Form2 B = new Form2();
B.Show();
textBox1.Text = B.textBox1.Text;

Form2的部分程式碼
internal System.Windows.Forms.TextBox textBox1;

情況3.

B要A的全部>///<(我要的東西)

方法1.

Form1的部分程式碼
Form2 B = new Form2();
B.Owner = this;
B.Show();

Form2的部分程式碼
((Form1)this.Owner).textBox1.Text = "我要動你!!!!!";

方法2.

Form1的部分程式碼
Form2 B = new Form2(this);
B.Show();

Form2的部分程式碼
public LinkList(Form1 A)
{
 InitializeComponent();
 this.Tag = A;
}
然後
((Form1)this.Tag).textBox1.Text = "我要控制你的全部>///<";

情況4.

用MDIContainer(((不過這樣子視窗全都在父視窗裡面了~太害羞了~不是我要的)))

Form1的部分程式碼
this.IsMdiContainer = true;
Form2 B = new Form2();
B.MdiParent = this;
B.Show();

Form2的部分程式碼
this.Parent.FindForm().textBox1.Text = "我在你的裡面~(羞";

4 則留言:

  1. //form1
    private void button1_Click(object sender, EventArgs e)
    {
    button2.Enabled = false;
    form2.show();
    }

    //form2
    private void button1_Click(object sender, EventArgs e)//關閉
    {
    this.Dispose();
    }

    請問要怎麼設定在關閉form2時讓form1的button2.Enabled = true;

    謝謝!!!

    回覆刪除
  2. 在Form1
    要把form2的owner設為form1

    Form2 B = new Form2();
    B.Owner = this;
    B.Show();


    這樣就可以在Form2使用Form1的東西 當然要把按鈕的Access Modifier 改為public 之類

    ((Form1)this.Owner).button2.Enabled = true;

    回覆刪除
  3. Thank you so much for the help.

    You are a HERO!!!

    回覆刪除

讀取中…