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 = "我在你的裡面~(羞";

1 則留言:

  1. Lucky Club Casino Site - Lucky Club Live Casino
    Lucky Club Casino is your trusted and trusted online casino that is safe and regulated in the UK. · Live Dealer · Mobile casino · Live Roulette · Roulette luckyclub

    回覆刪除

您可以使用一些 HTML 標記,例如 <b>, <i>, <a>