2015-08-24 65 views
-8

我使用C#和Form2(設置窗體)必須訪問Form1中的對象和數據,因此我將此代碼添加到Form1。無法顯示Form2(Form1 frm)

Form1 ths; 

public Form2(Form1 frm) 
{ 
    InitializeComponent(); 
    ths = frm; 

這工作,但我需要讓有人點擊設置按鈕時,Form2顯示,所以我試過這段代碼。

private void button1_Click(object sender, EventArgs e) 
{ 
Form2 form2 = new Form2(); 
    form2.Show(); 
} 

可是所以我想我得到了一個錯誤,

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 form2 = new Form2(Form1 frm); 
     form2.Show(); 
} 

任何想法,將不勝感激。

+0

'Form2的窗口2 =新的窗體2(這個);'? – Eser

+2

你會得到什麼錯誤? –

回答

1

使用

Form2 form2 = new Form2(this); //here 'this' is current class instance 

而不是

Form2 form2 = new Form2(Form1 frm); //don't mention the parameter type while calling 
+0

Thx這麼多,這幫了我很多:D –

2

試試這個

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 form2 = new Form2(this); 
     form2.Show(); 
} 

您需要通過在Form1

+0

你也想讓form2的構造函數(以form1實例爲例)調用窗體的默認構造函數...... –

0

注意當前實例:這僅僅是一個解決方法:),有更好的方式,但要幫助你,這是我的,希望這有助於。

如果您使用此代碼在Form2中。

Form1 ths; 

public Form2(Form1 frm) 
{ 
    InitializeComponent(); 
    ths = frm; 

,那麼你要訪問的窗口2爲新窗口..

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 form2 = new Form2(); // a definite error because you need to pass a Form1 class in here. 
    form2.Show(); 
} 

,所以我覺得這裏的誤解是,下面的代碼可能來自不同的形式,該代碼可能來自Form3 ? Form8? (請隨時糾正如果我錯了:d),如果這樣,那麼你必須輸入ATLEAST通用Form1中,

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 form2 = new Form2(new Form1()); // but this is bad because it will always call InitializeComponent(); everytime new Form1() is executed.. *_* 
    form2.Show(); 
} 

,或者如果你有,你想你的Form1的屬性事件進行跨系統,利用普通類就像「的Program.cs」例如,在

public static Form1 form1 { get; set; } 

代碼,然後訪問變量這樣

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 form2 = new Form2(Program.form1); 
    form2.Show(); 
}