2012-08-13 32 views
0

這是一個非常簡單的問題,但我找不到解決方案(如果這是原始的,我不是專業的程序員)。在Form1中,我有一個名爲「A」的變量,它的值爲1.我將此發送給Form2並將其值更改爲2.然後在Form2上關閉,我需要將更新後的值發送到Form1。這最後一部分我不知道該怎麼做,我需要你的幫助。如何檢索form2關閉時變量A的更新值?檢索form2關閉時變量A的更新值? C#

回答

4

如果您有一個由Form2更改的值,並且該值由Form2管理,則可以將其作爲Form2的屬性公開,例如,

public class Form2 
{ 
    public string MyValue 
    { 
     get { return myValue; } 
    } 
} 

,然後你可以檢索它像

Form2 f2 = new Form2(); 
f2.ShowDialog(); 
string theValue = f2.MyValue; 

一般來說,你可能要檢查的ShowDialog的返回的DialogResult()來查看用戶是否按下例如確定或取消按鈕。我不確定在這個特殊情況下你是否需要這個。

UPDATE

如果Form2的是不是一個對話框,您可以改用一個回調格局通知Form1中該窗體2被關閉,以允許Form1中檢索它從窗體2需要的任何值。或者,您可以讓回調直接提供您需要的值。

具體而言,您可以將一個Func<T>傳遞給Form2,該Form2指向Form1中的回調方法。當Form2確定它正在關閉時,它會調用Func<T>。這裏,T表示您想要傳回給Form1的變量的類型。

下面是假定T是一個字符串的例子:

public Form2 : Form 
{ 
    public void MyCallback(string value) { /* Do something with value */ 
} 

public Form1 : Form 
{ 
    Func<string> callback; 
    public Form1(Func<string> callback)  
    { 
     this.callback = callback; 
    } 

    private void Form1_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     if (callback != null) callback(myValue); 
    } 
} 
+0

這隻適用於如果form2是對話框。 – davenewza 2012-08-13 15:27:29

+0

唯一的問題是,當我更新Form 2中的變量Form1時,仍未更新該值。 – Amir 2012-08-13 15:28:48

+2

@davenewza:調用示例顯示一個對話框,爲true。但是,檢索價值的方法適用於任何形式。 – 2012-08-13 15:32:59

2

的WinForm有一個事件稱爲FormClosing。右鍵單擊表單並選擇屬性,在IDE的右側,您將獲得屬性。會有一個黃色的「閃電」圖標。您將在那裏找到FormClosing事件。現在,在表單關閉時添加您想要的代碼

2

您可以在form1上處理form2.FormClosing事件。您可以在form1上檢索您的價值form2.B(前提是它可公開訪問),因爲form2正在關閉。從關閉事件

form2.FormClosing += OnFormBClosing; 

private void OnFormBClosing(object sender, FormClosingEventArgs eventArgs) 
{ 
    A = form2.B; 
} 
+2

我真的很想理解這裏的3個downvotes。從常見問題解答:*最重要的是,誠實。如果您看到錯誤信息,請將其投票。添加註釋,指出具體是錯誤的。提供你自己的更好的答案。最棒的是 - 編輯和改進現有的問題和答案!* – 2012-08-13 17:34:23

+0

我沒有做到! – Amir 2012-08-13 18:25:00

0

使用

private void Form2_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    //update 
} 

MSDN Library

0

它可能會更好,如果你可以發表你的實際的源代碼。

我想你從Form1中打開Form2,是不是?如果這是真的,我認爲寫這樣的嘗試從form2關閉事件更新form1可能會更好。

Form2 form2 = new Form2(); 
form2.A = this.A; // here this = form1 
if (DialogResult.OK == form2.ShowDialog()) 
{ 
    // So here, retrieve the property from form2. 
    this.A = form2.A; 
}