2014-06-19 27 views
2

我有一個問題真的開始在我的頭... 我的應用程序有一個用項目填充的ListView控件。當你雙擊一個項目時,它會創建一個表單的新實例。然後創建一個新面板並將該表單添加到面板。然而,在我的生活中,我無法弄清楚如何在面板內部關閉窗體。無法關閉嵌入在面板中的表格

在我的DoubleClick事件:

Dim frm As New frmStorePage(_store.Code, _store.Name) 

'Create a new panel with the store page 
Dim pnl As New Panel 
pnl.Name = _store.Code 
pnl.BackColor = SystemColors.Control 
pnl.Size = New Size(1522, 892) 
pnl.Location = New Point(3, 3) 
frm.TopLevel = False 
frm.Name = _store.Code 
pnl.Controls.Add(frm) 
frm.Show() 
pnlStores.Controls.Add(pnl) 
pnl.BringToFront() 
... 

在我的關閉事件:

Dim panel As Panel = CType(pnlStores.Controls.Find(lsvOpenStoreList.SelectedItems(0).Name, False)(0), Windows.Forms.Panel) 

For Each control As Control In panel.Controls 
    If TypeOf control Is Windows.Forms.Form And control.Name = panel.Name Then 
     control.Dispose() 
    End If 
Next 

pnlStores.Controls.Remove(panel) 
panel.Dispose() 
pnlStoreList.BringToFront() 
... 

我也曾嘗試宣告我的形式作爲一個全局變量,但似乎仍不能將其關閉。 窗體關閉時會停止一些計時器事件,但即使面板關閉,計時器事件仍在運行。看起來這個表格在後臺仍然很活躍。

任何幫助,將不勝感激。

+0

在用VB編程16年,我不知道你可以添加一個窗體到面板!但是,你有沒有嘗試在處置之前調用'ctype(control,form).close'方法?我會認爲處置會這樣做,但在這種情況下顯然不會。 – Steve

+0

謝謝史蒂夫,但不是 - 不幸的是沒有把它排序。我可以告訴這個表單仍在運行,因爲我將Timer.Stop事件附加到窗體close方法。其中一個計時器每次執行時都給我一個錯誤,當我關閉面板/窗體時,我仍然從計時器中獲得這個錯誤彈出窗口。 – Riples

+0

我無法重現您的問題。我做了一些代碼在面板中放置一個表單(帶有啓動時的計時器,當關閉時停止計時),並且只要顯示錶單,它就運行我的計時器,當我告訴表單關閉時,它停止運行它。我使用了你提供的大部分代碼,所以它必須是別的東西,不在這裏。 – Steve

回答

0

由於愚蠢的疏忽,我沒有看到我用來處理所有控件並關閉表單的代碼不在FormClosing事件中,而是實際上在一個名爲Close的命令按鈕下。因此,我的關閉程序從未被調用,因此定時器保持活動狀態。

謝謝