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
4

3 回答 3

1

您正在寻找的是属性模式。

检查表单的 modal 属性是否为真(即表单用 ShowDialog 显示)

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

现在对于您的错误(我现在还没有 Visual Studio 尝试它)但是您的 IsAnyDialogShown(),它似乎总是返回 true :

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
于 2012-11-12T14:10:45.837 回答
0

您需要检查表单的 Visible 属性,即布尔值。如果为真,则显示形式,否则隐藏。

于 2012-11-12T13:26:34.087 回答
0

那只是在做我拥有的表格。与它们是否是对话框形式无关。即它会选择正常的形式。

此外,如果您希望它按预期工作,您应该在传递所有者的地方使用重载。

如在m.ShowDialog(Me);

不是我做过的事情,但如果我在 Me.OwnedForms 中所有者不是我,我希望我的钱回来。

于 2012-11-12T13:32:09.440 回答