フォームクラスの新しいインスタンスを作成してから、AcDialogボックスとして開くにはどうすればよいですか(他のコードを一時停止)しますか?

StackOverflow https://stackoverflow.com/questions/8338895

  •  26-10-2019
  •  | 
  •  

質問

問題

複雑な検索フォームがあり、ユーザーが複数の検索を同時に実行できるようにするために(同時に)数回開く必要があります。 (クラスのように)フォームのインスタンスを使用して開く機能を見つけました。

Option Compare Database
Option Explicit

'Array to hold Form Instances
Private MyFormCollection(1 To 4) As Form_frmTest

Private Sub cmd_CloneMe_Click()
    Dim intCounter As Integer

    For intCounter = 1 To 4
        Set MyFormCollection(intCounter) = New Form_frmTest
        MyFormCollection(intCounter).Caption = "Form #" & intCounter
        MyFormCollection(intCounter).Visible = True
    Next intCounter

    Forms!frmTest.SetFocus
End Sub

これは、フォームの複数のインスタンスを開く例であり、クリックごとに1つのインスタントを開く必要があるため、最終コードに使用するものではありませんが、おそらく他のインスタントを開いている可能性があります。

しかし、私はそれらの1つをAcdialogとして複製する方法を解決することはできません(したがって、新しいダイアログフォームを非表示または閉じるまで、関数は一時停止します)。通常、通常のフォームを開く方法(コピーではありません)は次のとおりです。

Call DoCmd.OpenForm("SomeForm", acNormal, , , , acDialog)

質問

ダイアログボックスとしてフォームの新しいインスタンスを開くにはどうすればよいですか(新しいフォームが閉じたり非表示になるまで関数が一時停止します)。

ありがとう

役に立ちましたか?

解決

このコードを使用して、フォームが表示されているかどうかを確認できます。

Private Function IsVisible(intObjType As Integer, strObjName As String) As Boolean
    Dim intObjState As Integer
    intObjState = SysCmd(acSysCmdGetObjectState, intObjType, strObjName)
    IsVisible = intObjState And acObjStateOpen
End Function

はいの場合は、待つ以外に何もしません:

Do While IsVisible(acForm, "frmInfo")
    DoEvents
Loop

==================

OK、別のアイデア:ダイアログモーダルを開き、呼び出し関数のコードを停止するか、より多くのダイアログでライブして呼び出し関数を実行するかのどちらかがあります。

これを解決する唯一の方法は、カウントがまだ> 0である場合、カウントが開いているダイアログのカウンターであり、呼び出し関数で何かをすることを拒否していると思います。

他のヒント

呼び出されたフォームでパブリック関数を記述することができ、その関数が(フォームを閉じることにより)戻るまで、呼び出し方式がブロックされます。以下の例では、[完了]ボタンをクリックすると、返品が設定される場合があります

Option Explicit
Private m_dlgResult As VbMsgBoxResult

Public Function ShowDialog() As VbMsgBoxResult

    m_dlgResult = vbCancel
    Me.Show vbModal
    ShowDialog = m_dlgResult

End Function

Private Sub Done_Click()

    m_dlgResult = vbOK
    Unload Me

End Sub
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top