Vb.net 我能';不显示非';t带有form.ShowDialog()的顶层

Vb.net 我能';不显示非';t带有form.ShowDialog()的顶层,vb.net,winforms,Vb.net,Winforms,我的启动表单是一个模式安全表单,运行良好。但是,如果用户“注销”,则必须以模式对话框的形式再次显示安全窗体。最后一步就是一切都出了问题。它显示了形式,在我的其他形式之前,但它不是模态的 首先,我调用一个在模块中编写的方法,因为我必须能够从我想要的每个表单中调用这个方法 Public Sub CallWaiterKey() Dim oForm As frmWaiterKey = New frmWaiterKey() Try If mWaiterKey.Length >

我的启动表单是一个模式安全表单,运行良好。但是,如果用户“注销”,则必须以模式对话框的形式再次显示安全窗体。最后一步就是一切都出了问题。它显示了形式,在我的其他形式之前,但它不是模态的

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

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
当我调用form.ShowDialog()的
(这是
frmWaiterKey
)时,它会出现,但不是模态。 我仍然可以单击
frmMenu
上的按钮,我从中调用了
CallWaiterKey()

我做错什么了吗?

还是我应该用其他方式打电话?

我不使用ShowDialog;但是我认为,您需要指定窗口所有者来强制执行该模式。如果我错了,其他人会纠正我

oForm.ShowDialog(me)
**等一下**我会马上修改,我刚刚回忆起您是从一个模块呼叫,me不会在基本模块中计算


这里有一个

我不使用ShowDialog;但是我认为,您需要指定窗口所有者来强制执行该模式。如果我错了,其他人会纠正我

oForm.ShowDialog(me)
**等一下**我会马上修改,我刚刚回忆起您是从一个模块呼叫,me不会在基本模块中计算

这是一个

(我的VB很烂,所以忽略语法错误)

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

Public Sub CallWaiterKey(ownerForm as Form)
  Dim oForm As frmWaiterKey = New frmWaiterKey()
     ' .... 
            'here it goes wrong
            oForm.ShowDialog(ownerForm)
     ' ....
End Sub
(我的VB糟透了,所以忽略语法错误)

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

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

好的,这似乎有效。现在我仍然有一些线程问题,但我希望我能解决它们。非常感谢。根据文档,当没有指定所有者时。@Cyborgx37--是的,这是真的。我发现在我打电话的那一刻,没有任何表单是真正的“活动的”。现在一切都可以使用上面的代码工作了。线程问题也已修复。谢谢大家!!好的,这似乎有效。现在我仍然有一些线程问题,但我希望我能解决它们。非常感谢。根据文档,当没有指定所有者时。@Cyborgx37--是的,这是真的。我发现在我打电话的那一刻,没有任何表单是真正的“活动的”。现在一切都可以使用上面的代码工作了。线程问题也已修复。谢谢大家!!您可能希望每次都重新检查创建新对话框的方法。当使用ShowDialog显示的表单关闭时,我可以想象这样一种场景:在一天没有重新启动和许多调酒师登录和注销之后,您的系统性能可能会受到后台运行的所有隐藏表单的负面影响。您可能希望每次重新检查创建新对话框的方法。当使用ShowDialog显示的表单关闭时,我可以想象这样一种场景:在一天没有重新启动和许多调酒师登录和注销之后,您的系统性能可能会受到后台运行的所有隐藏表单的负面影响。谢谢您的回答。当我使用oForm.ShowDialog()将userForm作为参数提供时,它会工作。是的,就是这样。如果我回答了你的问题,请把这个标记出来。谢谢你的回答。当我使用oForm.ShowDialog()将userForm作为参数提供时,它会工作。是的,就是这样。如果我回答了你的问题,请记下这一点。