要拿子視窗的物件來用~~~~
或是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!!!
^_^ 你太客氣了
刪除