Vella
Vella

Reputation: 81

I can't show a form that isn't top level with form.ShowDialog()

My startup form is a modal security form which works fine. But, if the user "logs out", the security form must be displayed again as a modal dialog. This last step is where everything goes wrong. It shows the form, in front of my other forms, but it's not modal...

First, I call a method that's written in a module, because I have to be able to call this method from every form I want.

Public Sub CallWaiterKey()
Dim oForm As frmWaiterKey = New frmWaiterKey()
    Try
        If mWaiterKey.Length > 0 And mWaiterKeyType.Length > 0 Then

            If Convert.ToInt32(mWaiterKey) > 0 And Convert.ToInt32(mWaiterKeyType) = 2 Then
                oForm.TypeOfKey = 2
            ElseIf Convert.ToInt32(mWaiterKey) > 0 And Convert.ToInt32(mWaiterKeyType) = 1 Then
                oForm.TypeOfKey = 1
            End If
            'here it goes wrong
            oForm.ShowDialog()
        End If

    Catch ex As Exception
        MsgBox(ex)
    End Try
End Sub

When I call oForm.ShowDialog() (that's the frmWaiterKey), it comes up but isn't modal. I can still click the buttons that are placed on frmMenu, the form from which I called CallWaiterKey().

Am I doing something wrong here?
Or should I make the call in an other way?

Upvotes: 0

Views: 1440

Answers (2)

John Arlen
John Arlen

Reputation: 6689

(My VB sucks so ignore syntax errors)

To achieve what you are asking, specify the hosting form.

Public Sub CallWaiterKey(ownerForm as Form)
  Dim oForm As frmWaiterKey = New frmWaiterKey()
     ' .... 
            'here it goes wrong
            oForm.ShowDialog(ownerForm)
     ' ....
End Sub

Upvotes: 2

Donny McCoy
Donny McCoy

Reputation: 130

I don't use ShowDialog; but I believe that you need to specify the window owner to enforce the modality. If I'm wrong here, others will correct me.

oForm.ShowDialog(me)

** HOLD ON ** I will alter this in a second, I just recalled that you're calling from a module, me doesn't evaluate in a basic module.

Here is a MSDN reference

Upvotes: 2

Related Questions