我觉得不一定非要用多线程,因为我以前也做过一个类似的程序。 将处理代码写在模块中(*.bas),在frmState中添加一个名为lblState的label Sub ShowState() frmState.Show if u_check(index,s_act_sts1)= true then frmState.lblState="正在打印"'打印处理 A60120PrintfrmState.lblState="打印完毕" else u_mainexe=false goto u_mainexeExit end if unload frmstate End Sub
now this is source '---------------------------------------------------------------------- ' ' 画面1、画面入力メインコントロール処理 ' '引数 ' Index IN ボタンの添え字 ' Status IN 会話のステータス '戻り値 ' 正常終了 : False ' 異常終了 : True ' 'Ver 1.00 2000/03/10 松本 '---------------------------------------------------------------------- Public Function U_MainExe(ByRef Index As Integer, ByRef Status As Integer) As Boolean On Error GoTo U_MainExeErr
Dim objNextControl As Object '次会話最初のコントロール Dim objCommandBtn As Object 'コマンドボタンの参照
U_MainExe = False
'全機能共通処理 If S_BeginFunction(Index, Status, Me) = True Then Else Exit Function End If
'マウスを処理中にします。 Screen.MousePointer = vbHourglass
Select Case Status Case S_ACT_STS0 '初期表示を行います ' ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ コーディング開始 '初期表示処理 If U_ActDisp(Index, S_ACT_STS0) = True Then '初期状態にします If U_SetStatus(Index, S_ACT_STS1, objNextControl) = True Then 'フォーカスをセットします ' objNextControl.SetFocus Else '終了 U_MainExe = False GoTo U_MainExeExit End If Else '終了 U_MainExe = False GoTo U_MainExeExit End If
' ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ コーディング終了 Case S_ACT_STS1 '会話1の処理を行います ' ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ コーディング開始 Select Case Index Case S_ACT_KEY1 'ボタン1の処理を行います Case S_ACT_KEY2 'ボタン2の処理を行います Case S_ACT_KEY3 'ボタン3の処理を行います Case S_ACT_KEY4 'ボタン4の処理を行います Case S_ACT_KEY5 'ボタン5の処理を行います Case S_ACT_KEY6 'ボタン6の処理を行います Case S_ACT_KEY7 'ボタン7の処理を行います Case S_ACT_KEY8 'ボタン8の処理を行います Case S_ACT_KEY9 'ボタン9の処理を行います Case S_ACT_KEY10 'ボタン10の処理を行います ' プリンタの設定のダイアログを表示します cmdlgPrn.CancelError = True cmdlgPrn.PrinterDefault = True cmdlgPrn.Flags = &H10014C cmdlgPrn.ShowPrinter cmdlgPrn.CancelError = False
txt1.Text = Printer.DeviceName mintStatus = S_ACT_STS2 Case S_ACT_KEY11 'ボタン11の処理を行います(印刷) 'Add new by wei 2000/06/07 'チェック処理 If U_Check(Index, S_ACT_STS1) = True Then ' mintStatus = S_ACT_STS2 Else U_MainExe = False GoTo U_MainExeExit End If Case S_ACT_KEY12 'ボタン12の処理を行います(終了/戻る) '終了 Call S_ExitMain(Me)
Case Else MsgBox "画面2 画面表示画面ステータスエラー(プログラムエラー)", vbCritical End Select
' ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ コーディング終了 Case S_ACT_STS2 '会話2の処理を行います ' ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ コーディング開始 Select Case Index Case S_ACT_KEY1 'ボタン1の処理を行います Case S_ACT_KEY2 'ボタン2の処理を行います Case S_ACT_KEY3 'ボタン3の処理を行います Case S_ACT_KEY4 'ボタン4の処理を行います Case S_ACT_KEY5 'ボタン5の処理を行います Case S_ACT_KEY6 'ボタン6の処理を行います Case S_ACT_KEY7 'ボタン7の処理を行います Case S_ACT_KEY8 'ボタン8の処理を行います Case S_ACT_KEY9 'ボタン9の処理を行います Case S_ACT_KEY10 'ボタン10の処理を行います Case S_ACT_KEY11 'ボタン11の処理を行います(印刷) ********************************************************************** '2000/06/08 S_Act_Form3.Show
'Add new by wei 2000/06/07 'チェック処理 If U_Check(Index, S_ACT_STS2) = True Then
'call Printting...... Call A60120Print
S_Act_Form3.Hide S_Act_Form4.Show Else U_MainExe = False GoTo U_MainExeExit End If
Unload S_Act_Form3 Unload S_Act_Form4
******************************************************************** Case S_ACT_KEY12 'ボタン12の処理を行います(終了/戻る) '終了 Call S_ExitMain(Me)
Case Else MsgBox "画面2 画面表示画面ステータスエラー(プログラムエラー)", vbCritical End Select
' ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ コーディング終了 Case S_ACT_STS3 '会話3の処理を行います。 ' ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ コーディング開始' ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ コーディング終了 Case S_ACT_STS4 '会話4の処理を行います。 ' ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ コーディング開始' ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ コーディング終了 Case S_ACT_STS5 '会話5の処理を行います。 ' ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ コーディング開始' ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ コーディング終了 Case Else MsgBox "画面2 画面表示画面ステータスエラー(プログラムエラー)", vbCritical End Select
'全機能共通処理 If S_EndFunction(Index, Status, Me) = True Then Else Exit Function End If Exit Function U_MainExeErr: U_MainExe = False Call S_Err("U_MainExe", err) GoTo U_MainExeExit End Function
将处理代码写在模块中(*.bas),在frmState中添加一个名为lblState的label
Sub ShowState()
frmState.Show
if u_check(index,s_act_sts1)= true then
frmState.lblState="正在打印"'打印处理
A60120PrintfrmState.lblState="打印完毕"
else
u_mainexe=false
goto u_mainexeExit
end if
unload frmstate
End Sub
'
' 画面1、画面入力メインコントロール処理
'
'引数
' Index IN ボタンの添え字
' Status IN 会話のステータス
'戻り値
' 正常終了 : False
' 異常終了 : True
'
'Ver 1.00 2000/03/10 松本
'----------------------------------------------------------------------
Public Function U_MainExe(ByRef Index As Integer, ByRef Status As Integer) As Boolean On Error GoTo U_MainExeErr
Dim objNextControl As Object '次会話最初のコントロール
Dim objCommandBtn As Object 'コマンドボタンの参照
U_MainExe = False
'全機能共通処理
If S_BeginFunction(Index, Status, Me) = True Then
Else
Exit Function
End If
'マウスを処理中にします。
Screen.MousePointer = vbHourglass
Select Case Status
Case S_ACT_STS0 '初期表示を行います
' ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ コーディング開始
'初期表示処理
If U_ActDisp(Index, S_ACT_STS0) = True Then
'初期状態にします
If U_SetStatus(Index, S_ACT_STS1, objNextControl) = True Then
'フォーカスをセットします
' objNextControl.SetFocus
Else
'終了
U_MainExe = False
GoTo U_MainExeExit
End If
Else
'終了
U_MainExe = False
GoTo U_MainExeExit
End If
' ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ コーディング終了
Case S_ACT_STS1 '会話1の処理を行います
' ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ コーディング開始
Select Case Index
Case S_ACT_KEY1 'ボタン1の処理を行います
Case S_ACT_KEY2 'ボタン2の処理を行います
Case S_ACT_KEY3 'ボタン3の処理を行います
Case S_ACT_KEY4 'ボタン4の処理を行います
Case S_ACT_KEY5 'ボタン5の処理を行います
Case S_ACT_KEY6 'ボタン6の処理を行います
Case S_ACT_KEY7 'ボタン7の処理を行います
Case S_ACT_KEY8 'ボタン8の処理を行います
Case S_ACT_KEY9 'ボタン9の処理を行います
Case S_ACT_KEY10 'ボタン10の処理を行います
' プリンタの設定のダイアログを表示します
cmdlgPrn.CancelError = True
cmdlgPrn.PrinterDefault = True
cmdlgPrn.Flags = &H10014C
cmdlgPrn.ShowPrinter
cmdlgPrn.CancelError = False
' 選択されたプリンタを画面に表示します
txt1.Text = Printer.DeviceName
mintStatus = S_ACT_STS2 Case S_ACT_KEY11 'ボタン11の処理を行います(印刷)
'Add new by wei 2000/06/07
'チェック処理
If U_Check(Index, S_ACT_STS1) = True Then
' mintStatus = S_ACT_STS2
Else
U_MainExe = False
GoTo U_MainExeExit
End If
Case S_ACT_KEY12 'ボタン12の処理を行います(終了/戻る)
'終了
Call S_ExitMain(Me)
Case Else
MsgBox "画面2 画面表示画面ステータスエラー(プログラムエラー)", vbCritical
End Select
' ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ コーディング終了
Case S_ACT_STS2 '会話2の処理を行います
' ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ コーディング開始
Select Case Index
Case S_ACT_KEY1 'ボタン1の処理を行います
Case S_ACT_KEY2 'ボタン2の処理を行います
Case S_ACT_KEY3 'ボタン3の処理を行います
Case S_ACT_KEY4 'ボタン4の処理を行います
Case S_ACT_KEY5 'ボタン5の処理を行います
Case S_ACT_KEY6 'ボタン6の処理を行います
Case S_ACT_KEY7 'ボタン7の処理を行います
Case S_ACT_KEY8 'ボタン8の処理を行います
Case S_ACT_KEY9 'ボタン9の処理を行います
Case S_ACT_KEY10 'ボタン10の処理を行います
Case S_ACT_KEY11 'ボタン11の処理を行います(印刷)
**********************************************************************
'2000/06/08
S_Act_Form3.Show
'Add new by wei 2000/06/07
'チェック処理
If U_Check(Index, S_ACT_STS2) = True Then
'call Printting......
Call A60120Print
S_Act_Form3.Hide
S_Act_Form4.Show
Else
U_MainExe = False
GoTo U_MainExeExit
End If
Unload S_Act_Form3
Unload S_Act_Form4
********************************************************************
Case S_ACT_KEY12 'ボタン12の処理を行います(終了/戻る)
'終了
Call S_ExitMain(Me)
Case Else
MsgBox "画面2 画面表示画面ステータスエラー(プログラムエラー)", vbCritical
End Select
' ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ コーディング終了
Case S_ACT_STS3 '会話3の処理を行います。
' ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ コーディング開始' ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ コーディング終了
Case S_ACT_STS4 '会話4の処理を行います。
' ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ コーディング開始' ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ コーディング終了
Case S_ACT_STS5 '会話5の処理を行います。
' ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ コーディング開始' ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ コーディング終了
Case Else
MsgBox "画面2 画面表示画面ステータスエラー(プログラムエラー)", vbCritical
End Select
U_MainExe = True
U_MainExeExit:
' ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ コーディング開始
' ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ コーディング終了
'マウスを処理中にします。
Screen.MousePointer = vbNormal
'全機能共通処理
If S_EndFunction(Index, Status, Me) = True Then
Else
Exit Function
End If Exit Function
U_MainExeErr:
U_MainExe = False
Call S_Err("U_MainExe", err)
GoTo U_MainExeExit
End Function
就是他的父窗体 我还可以在调用一个实模式的窗体吗?
在有 我这个程序是一个嵌套的弹出一系列的窗体
总的来说就是
FORM1
STATUS1:
STATUS2:
FORM2.show vbmodal
unload form2
STATUS3:在form2 中
status1:
status2:
form3.show vbmodal ?????出现问题
unload form3status3:大体就是这样啦!
请高手指教