0

私のスタートアップ フォームは、正常に動作するモーダル セキュリティ フォームです。ただし、ユーザーが「ログアウト」した場合は、セキュリティ フォームをモーダル ダイアログとして再度表示する必要があります。この最後のステップで、すべてがうまくいきません。他のフォームの前にフォームが表示されますが、モーダルではありません...

まず、モジュールに記述されたメソッドを呼び出します。これは、必要なすべてのフォームからこのメソッドを呼び出せるようにする必要があるためです。

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()

ここで何か間違ったことをしていますか?
それとも別の方法で電話をかけるべきですか?

4

2 に答える 2

2

(私のVBは最悪なので、構文エラーは無視してください)

あなたが求めていることを達成するために、ホスティングフォームを指定してください。

Public Sub CallWaiterKey(ownerForm as Form)
  Dim oForm As frmWaiterKey = New frmWaiterKey()
     ' .... 
            'here it goes wrong
            oForm.ShowDialog(ownerForm)
     ' ....
End Sub
于 2012-10-16T13:49:36.793 に答える
2

ShowDialog は使用しません。しかし、モダリティを強制するには、ウィンドウの所有を指定する必要があると思います。ここで私が間違っていれば、他の人が私を訂正してくれます。

oForm.ShowDialog(me)

** ちょっと待って ** すぐにこれを変更します。モジュールから呼び出していることを思い出しました。は基本モジュールでは評価しません。

ここにMSDNリファレンスがあります

于 2012-10-16T13:43:00.620 に答える