1

実行に時間がかかる関数があります。

関数の開始時に表示する小さなモーダルフォームを作成して、関数の終了時に閉じるにはどうすればよいですか?

4

3 に答える 3

2

このための私のお気に入りのトリックは、実行中のコードを、実行中に表示されるフォームに配置することです。それが終わったら、UnloadMeを呼び出します

'Code in Form1
Call frmWait.Show(vbModal, Me)

'Code in frmWait
Private Sub Form_Activate()

    'Do some work ...

    Unload Me

End Sub
于 2012-11-21T22:58:30.087 に答える
2

frmModal が表示したいフォームだとします。関数の開始時に

frmModal.Show
frmModal.refresh

関数の最後に入れます

Unload frmModal
于 2012-11-20T23:17:38.610 に答える
1

フォームモーダル(form1.show vbmodal)をロードすると、モデルフォームが閉じられるまで後続のコードは実行されません。

必要なものをシミュレートする簡単な方法(APIなし)は、フォームをモードレスで表示し、他のフォームを一時的に無効にすることです。

次のテストプロジェクトのcommand1とcommand2の違いを見てください。

'3 forms :
'    Form1 : name=Form1
'        contains 2 command buttons with the name Command1 and Command2
'    Form2 and Form3 contain nothing special
Option Explicit

Private Sub Command1_Click()
  Dim lngEnd As Long
  Form3.Show vbModal
  lngEnd = Timer + 5
  Do While Timer < lngEnd
    Caption = CStr(Timer)
    DoEvents
  Loop
  Unload Form3
End Sub

Private Sub Command2_Click()
  Dim lngEnd As Long
  Enabled = False
  Form2.Show vbModeless, Me
  lngEnd = Timer + 5
  Do While Timer < lngEnd
    Caption = CStr(Timer)
    DoEvents
  Loop
  Enabled = True
  Unload Form2
End Sub
于 2012-11-21T07:30:13.263 に答える