2016-07-30 29 views
-1

我有兩個win窗體,f1和f2。當我點擊f1上的datagridview的行標題時,f1 hide,f2顯示,並且數據從f1傳遞到f2。現在用戶在f2上工作並點擊「關閉」後,f2隱藏和f1顯示。我在f1中創建了函數來捕獲用戶對數據庫所做的任何更改。問題是我如何自動調用這個函數,而不是在f2 hide和f1顯示時使用按鈕?謝謝。當窗體再次出現時,自動運行一個函數C#

回答

-1

活動名爲Shown。每次窗體重新出現時都會運行。

我希望這會有所幫助。

編輯:

試試這個:

this.Hide(); 
f2.ShowDialog(); 

MethodUpdateValues(); 
this.Show(); 

這將暫停在第二線,並繼續當您關閉F2。

+0

謝謝。我已經對Shown事件進行過測試。當f1第一次出現時,顯示的事件開始了,當f1再次出現並且f2隱藏時,顯示不再發射。我所希望的恰恰是在這個時候觸發功能。 – Viviannne

+0

@Viviannne我做了一個新的方法。這會工作嗎? – MasterXD

+0

謝謝,我剛剛看到你的更新。我在史蒂夫的解決方案上測試過,它運行良好。 – Viviannne

0

問題是我如何可以調用這個函數自動而不是使用 按鈕

的嘛,然後調用該函數在窗體構造函數或處理FormLoad事件並調用事件處理函數。

+0

我看不到-1的理由,這是正確的答案 –

+0

謝謝。 Load事件在f1第一次出現時觸發,在它隱藏並重新出現load事件後再次觸發?我不這麼認爲。也許還有其他一些事件。 – Viviannne

1

在隱藏Form1(f1)之前和Form2(f2)創建過程之後,傳遞給f2一個Action委託,當它關閉時,它將由f2調用。此委託方法將在Form1類內,將重新激活隱藏的實例

public class Form2: Form 
{ 
    public Action ReactivateParent; 

    .... form2 methods .... 

    // Here I call the ReactivateParent inside the FormClosed event handler 
    // of Form2, but these lines can also in a button click event 
    // that terminates the Form2 instance.... 
    protected void Form2_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     if(ReactivateParent != null) 
      ReactivateParent(); 
    } 
} 

現在在Form1上,當你準備顯示窗體2實例綁定的Action委託

Form2 f2 = new Form2(); 
f2.ReactivateParent += ReactivateMe; 
this.Hide 
f2.Show(); 
... 

,並添加一個方法到Form1命名ReactivateMe

private void ReactivateMe() 
{ 
    // Add here whatever you need to update your Form1 instance.... 
    .... 
    // Reshow the now updated Form1 instance... 
    this.Show(); 

} 

這種方法的優點在於這樣一個事實:Form2的是不關心什麼是在ReactivateParent和所有其他形式進行在您的應用程序中可以重用Form2的功能,並在Form2實例關閉時通知。

爲了進一步改進這種模式,您還可以考慮修改Action代理以接收將由Form2實例填充的自定義類的實例,並修改數據。這可以幫助避免調用數據庫來更新Form1實例。

+0

明白了。將測試,我認爲這應該工作。 – Viviannne

+0

完全按照我的預期工作,謝謝史蒂夫。 – Viviannne

+0

很高興能有所幫助。 – Steve

相關問題