我无法使用form.ShowDialog()显示不是顶级的表单

时间:2012-10-16 13:16:18

标签: vb.net winforms

我的启动表单是一种模态安全表单,工作正常。但是,如果用户“注销”,则必须再次将安全表单显示为模式对话框。最后一步是出现问题。它显示了我的其他形式的形式,但它不是模态...

首先,我调用一个在模块中编写的方法,因为我必须能够从我想要的每个表单中调用此方法。

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

当我拨打oForm.ShowDialog()(那是frmWaiterKey)时,它会出现,但不是模态的。 我仍然可以点击放置在frmMenu上的按钮,我打电话给CallWaiterKey()

我在这里做错了吗? 或者我应该以其他方式拨打电话吗?

2 个答案:

答案 0 :(得分:2)

我不使用ShowDialog;但我相信您需要指定窗口所有者来强制执行该模式。如果我在这里错了,别人会纠正我。

oForm.ShowDialog(me)

** HOLD ON **我会在一秒内改变这一点,我只是回想起你是从一个模块打电话,不会在基本模块中评估。

这是MSDN reference

答案 1 :(得分:2)

(我的VB很糟糕,所以忽略了语法错误)

要实现您的要求,请指定托管表单。

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