tmighty
tmighty

Reputation: 11389

Check if any dialog is open

Does anybody see my mistake here?

I am unable to recognize if a form is shown as a dialog in my app.

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

Upvotes: 0

Views: 5850

Answers (3)

Nianios
Nianios

Reputation: 1426

What you are looking is for the property modal.

Check if the form's modal property is true (that is meaning that the form is showed with ShowDialog)

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

Now for your mistake (I haven't visual studio to try it right now) but your IsAnyDialogShown(), it seems that it returns always 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

Hope I helped a little. Tell me if I can do something more

So after your comments.
Try this:

        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

Upvotes: 1

Tony Hopkinson
Tony Hopkinson

Reputation: 20320

That's just doing forms owned by Me. Nothing to do with whether they are dialog forms. ie.e it will pick up normal forms.

Also if you want this to work as expected , you should use the overload where you pass the owner.

as in m.ShowDialog(Me);

Not something I've ever done but if Owner isn't me in Me.OwnedForms I want my money back.

Upvotes: 0

Alex
Alex

Reputation: 987

You need to check Visible property of the form, which is the boolean. If it is true, then form is shown, else it's hidden.

Upvotes: 0

Related Questions