
要拿子視窗的物件來用~~~~
或是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 = "我在你的裡面~(羞";

  
//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;
謝謝!!!
在Form1
回覆刪除要把form2的owner設為form1
Form2 B = new Form2();
B.Owner = this;
B.Show();
這樣就可以在Form2使用Form1的東西 當然要把按鈕的Access Modifier 改為public 之類
((Form1)this.Owner).button2.Enabled = true;
Thank you so much for the help.
回覆刪除You are a HERO!!!
^_^ 你太客氣了
刪除