2013-02-27 202 views
2

我有一個程序需要來自另一個表單的數據,我需要傳遞它而不創建第一個表單的新實例。我怎樣才能做到這一點?將數據傳遞到現有表格

ex。

Form2 f2 = new Form2(); 

f2.showdialog(); 

時F2顯示,他們是項目的列表視圖,當我點擊一個項目,我想這個項目被髮送回第一種形式,但不關閉窗口2並沒有實例化一個新的Form1中。

+0

你可以簡單地在你的form2中創建一個公共變量'selectedItem'或者其他東西,然後點擊它來指定它 – 2013-02-27 12:25:42

+0

'f2.showdialog();'應該是'f2.ShowDialog();' – 2013-02-27 12:25:43

回答

1

我需要通過它而不創建第一個窗體的新實例。

這意味着您的第一個窗體在後臺打開。您可以使用Application.OpenForms屬性獲取已經打開的表單,然後從那裏獲取數據。 是這樣的:

Form2 f2 = Application.OpenForms["Form2"] as Form2; 
if(f2 != null) 
    string data = f2.SomeProperty; 
0
也許

創建在Form1增變(組)方法。當您希望將數據傳回form1時,請調用mutator方法來更新表單。

1

您正在尋找某種事件。

public event EventHandler MyButtonClicked; 

並且在使用ShowDialog()之前;

Form2 f2 = new Form2(); 
f2.MyButtonClicked += f2_MyButtonClicked; 
f2.showdialog(); 

而且地方來處理該事件

void f2_MyButtonClicked(object sender, EventArgs e) 
{ 
    //Here you want to grab your list. You can get f2 from sender. 
    Form2 f2 = (Form2)sender; 

    throw new NotImplementedException(); 
} 

當您在窗體2單擊引發事件的按鈕。

void myButtonClicked(object sender, EventArgs e) 
{ 
    if (MyButtonClicked != null) 
    { 
     MyButtonClicked(this, new EventArgs()); 
    } 
} 

如果你想了解更多的事件,請看看。

http://msdn.microsoft.com/en-us/library/aa645739%28v=vs.71%29.aspx

+0

清晰,簡潔並且有一個例子;如果可以的話,我會加倍努力。 – Jonathan 2013-02-27 12:28:58

+0

@Jonathan非常感謝。 – Evelie 2013-02-27 12:29:50

0

也許最簡單的辦法就是在Form1可公開訪問的方法,知道如何處理新項目。然後在Form2中有對Form2對象的引用。 Form2有一個屬性,或者您設置Form1作爲父母Form2 f2 = new Form2(f1)(或this如果您從f1調用它)。

現在您已經參照了Form1對象,您可以調用它的方法來處理該項目。