2016-04-27 85 views
-2

我有一個具有由用戶執行不活動一段時間後自動註銷一個WinForm應用程序,該應用程序有一個像如何自動關閉對話框?

SearchCustomer.ShowDialog() 

一些對話框,如果用戶離開該對話框打開,並且時間到期用戶自動註銷,但該對話框保持打開狀態,因此即使用戶已註銷,任何人都可以使用該對話框。

有什麼辦法可以從主Form關閉這些對話框?

編輯: 有不同的方式打開另一個對話框

AddCustomer.Show() 
AddCustomer.BringToFront() 

編輯2解決方案基於jmcilhinney答案

For Each openForm In openForms 

    Dim H1 As Integer = openForm.GetHashCode() 
    Dim H2 As Integer = Me.GetHashCode() 
    If H1 <> H2 Then 'No igual 
     openForm.Close() 
    End If 
Next 
+0

只是這個對話框或其他對話框中有這樣的其他情況? – Steve

+1

'SearchCustomer.Close'將關閉表格 –

+0

@Steve是還有另一個以不同方式打開,我將代碼添加到主要問題,請重新閱讀,謝謝。 –

回答

2

我沒有測試過,但我想你應該能夠沿着這些方向做點什麼:

Dim openForms = My.Application.OpenForms.Cast(Of Form)().ToArray() 

For Each openForm In openForms 
    openForm.Close() 
Next 
+0

它關閉對話框,也是主窗體。 –

+0

因此,在循環內部,測試'openForm'是否是主窗體,如果不是,則只關閉它。 – jmcilhinney

+0

是的,我試圖弄清楚如何。我正在尋找一些有助於識別主窗體的屬性,我可以做些什麼,如不是openForm = Me? –

0

這是一個選項。

用所有權屬性打開您的表單。

AddCustomer.Show(Me) 
    'This open the form and gives the referring form ownership. 
    'It Also gives focus to the child form, keeping it on top of the referring form 

當引用表單關閉時,子表單也是如此。

+0

有趣,但不是我所需要的。我需要主窗體保持打開狀態,並在用戶註銷時關閉所有子窗體。無論如何,我已經解決了這個問題。不管怎麼說,還是要謝謝你。 –