2010-01-16 69 views
1

我有一個應用程序有2種形式。當我點擊形式2的按鈕,我希望它能夠改變在Form1的文本:C#使用多種形式

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form1.label1.Text = "Fred"; 
    } 
} 

編譯器會引發錯誤

我該怎麼辦呢?

回答

8

你在混淆窗體和表單實例。表格只是一個類。當Form1顯示時,顯示的是Form1類的一個實例。當Form2顯示時,將顯示Form2的一個實例。

您正在嘗試使用

Form1.label1.Text = "Fred"; 

但是,你只能設置一個實例的字段或成員。您指的是「Form1」。

你需要兩件事。我假設Form2是從Form1上的一個按鈕啓動的。添加一個構造函數到窗體2,它接受Form1的一個實例:

private Form1 _starter; 
public Form2(Form1 starter) : this() 
{ 
    _starter = starter; 
} 

然後將屬性添加到Form1中暴露的標籤文本:不要直接暴露控制 - 只有一個給定的形式應該知道的控制都在它什麼:

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

然後讓窗體2設置該屬性:

private void button1_Click(object sender, EventArgs e) 
{ 
    _starter.LabelText = "Fred"; 
} 
+0

謝謝你的回答。一切正常,現在:) – Greycrow 2010-01-16 19:09:04

3

你可能從Form1實例推出Form2一個實例,像這樣:

Form2 f2 = new Form2(); 
f2.Show(); 

如果是這樣的話,你就可以在Form2這樣的f2情況下更改文本:

f2.label1.Text = "new text"; 

請注意,您將需要作出label1公共領域(不是一個好的做法) ,或者使用屬性封裝它。希望這可以幫助。