2012-11-12 110 views
0

有沒有人在這裏看到我的錯誤?檢查是否有任何對話框打開

我無法識別表單在我的應用中是否顯示爲對話框。

Public Class Form1 

    Private m As Form2 

    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick 
    Me.Text = DateTime.Now.ToLongTimeString & " " & IsAnyDialogShown() 
    End Sub 

    Public Function IsAnyDialogShown() As Boolean 
    For Each f As Form In Me.OwnedForms 
     If f.Owner Is Me Then 
     Return True 
     End If 
    Next 
    End Function 

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 
    m = New Form2 
    m.ShowDialog() 
    End Sub 

End Class 

回答

1

你在找什麼是屬性模式。

檢查窗體的模式屬性爲true(即意味着形式表現出與ShowDialog的)

For Each f As Form In Me.OwnedForms 
    If f.Modal=True Then 
    'your code here 
    End If 
Next 

現在爲自己的錯誤(我沒有Visual Studio來嘗試它現在),但你IsAnyDialogShown(),它似乎總是返回真:

For Each f As Form In Me.OwnedForms ' (So f belongs to Me) 
    If f.Owner Is Me Then 'f.Owner is always me because you are seaching in forms that have as owner the Me form 
    Return True 
    End If 
Next 

希望我幫一點。 告訴我,如果我可以做更多

所以在您的意見。
試試這個:

 For Each frm as Form In Application.OpenForms 
      If frm.Modal=True Then 
      'do something 
      'Actually you should have only one form because only one can be in modal state 
      end if 
     Next 
+0

我想知道是否有任何對話框顯示在我的應用程序中,而不僅僅是「我」。但是我沒有找到類似於「對於每個f都是app.forms中的表單」 – tmighty

0

您需要檢查窗體的Visible屬性,它是布爾值。 如果它是真的,則顯示窗體,否則它是隱藏的。

+0

有問題的讀取再次交配。這與Visible無關。 –

0

這只是做我擁有的形式。與他們是否是對話框形式無關。它會採取正常的形式。

此外,如果您希望此功能按預期工作,您應該在通過所有者的地方使用超載。

m.ShowDialog(Me);

不是我做過,但如果業主不是我在Me.OwnedForms我想要回我的錢。

相關問題