2013-08-30 37 views
0

在我的應用程序中,我有兩個winforms。第一個作爲我的控制面板,第二個作爲屏幕截圖。但是,當我從Winform 2返回到Winform 1時,我創建了一個新的Winform並創建了一個全新的托盤圖標。這是我在程序第一次啓動時創建的最初的。當我製作一個新的Winform時刪除舊的winform和托盤圖標

當我的winform 1到WinForm的2我執行以下操作:

this.Hide(); 
Form2 form2 = new Form2(); 
form2.InstanceRef = this; 
form2.Show(); 

然後,當我想去從WinForm的2回WinForm的1我做了以下內容:

this.Close(); 
Winform1 form; 
form = new Winform1 (capturedImageObj); 
form.Show(); 

我知道直接蝙蝠的問題落在我創建一個新的Winform1的事實,但我需要這樣做,所以我可以通過我的capturedImageObj回到Winform 1.

我試過撥打this.close()this.dispose()在我的第一部分代碼中,但只關閉程序。有沒有一種方法可以處理Winform 1,但仍然使用Winform 2並將需要的對象傳回到Winform 1的新副本中?

這裏是我的Winform 1的構造:

public ControlPanel(Image imjObj) 
{ 
    InitializeComponent(); 
    _screenCap = new ScreenCapture(); 
    _screenCap.OnUpdateStatus += _screen_CapOnUpdateStatus; 
    capturedImage = imjObj; 
    imagePreview.Image = capturedImage; 
} 
+0

當captureImageObj沒有傳遞給Winform1時,它是否按預期工作? – Kurubaran

+0

爲什麼不在winform2中創建自定義事件,然後在Winform1中訂閱它。或者您可以偵聽Winform2的FormClosing事件,添加一個方法到Winform2中暴露圖像並從Winform2中獲取FormClosing EventHandler –

+0

capturedImageObj是我的Winform1構造函數的一部分我需要在我的第一個winform中顯示一些東西。我會更新我的構造函數代碼 – N0xus

回答

0

變化Winform1使用性質是這樣的:

public Image CapturedImage { 
    get { return imagePreview.Image; } 
    set { imagePreview.Image = value; } 
} 

然後改變你的構造是這樣的:

public ControlPanel(Image imjObj) 
{ 
    InitializeComponent(); 
    _screenCap = new ScreenCapture(); 
    _screenCap.OnUpdateStatus += _screen_CapOnUpdateStatus; 
    CapturedImage = imjObj; 
} 

而且,最後,改變你的Winform2來做到這一點:

((Winform1)this.InstanceRef).CapturedImage = capturedImageObj; 
this.InstanceRef.Show(); 
this.Close(); 

基礎上的評論,這聽起來像你InstanceRef屬性爲Form型。將其更改爲Winform1。或者,我改變了上面的代碼來爲你做一些演員。

+0

謝謝你,但我有this.In.InstanceRef.CapturedImage錯誤。我的程序是說沒有定義它,即使我把get和set在我的winform1中,就像你所建議的那樣。還有什麼我需要做的嗎? – N0xus