|
■No59298 (おう さん) に返信
>>> 処理しながらAを更新するためには、どうしたらよろしいでしょうか。
もしかして、ProgressBar や BackgroundWorker について知りたいわけでは無く、
モードレスフォームの扱いが分からないという事なのでしょうか。
> 1つの画面で処理中にもう一つの画面が表示されます。
> 処理が終わるともうひとつの画面が閉じます。
こういう感じで良いのでしょうか。
あとは、処理中にフォームの×ボタンを押された場合にどうするかとか、
Form1 上のデータを Form2 に渡す処理が必要があるのかどうかなど、
細かい制御を組み込む必要はあるでしょうけれども。
'--- Form2 (処理中画面) ---
Private Sub Form2_Shown(…
BackgroundWorker1.RunWorkerAsync(処理パラメータ)
End Sub
Private Sub BackgroundWorker1_DoWork(…
Dim bgw As BackgroundWorker = DirectCast(sender, BackgroundWorker)
Dim arg = CType(e.Argument, 何某)
Do Until …
'If bgw.CancellationPending Then
' Return
'End If
:
bgw.ReportProgress(進捗パーセント, 状態データ)
:
Loop
e.Result = 結果
End Sub
Private Sub BackgroundWorker1_ProgressChanged(…
'進捗表示
ProgressBar1.Value = e.ProgressPercentage
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(…
If e.Error IsNot Nothing Then
MsgBox("エラー:" & e.Error.Message, MsgBoxStyle.Critical)
'ElseIf e.Cancelled Then
' MsgBox("中止", MsgBoxStyle.Exclamation)
Else
Dim result As 何某 = CType(e.Result, 何某) '処理結果
MsgBox("完了")
Me.Close()
End If
End Sub
'--- Form1 (メイン画面) ---
'=== Form2 をモーダル表示する場合 ===
'Private Sub Button1_Click(…
' Using SubForm As New Form2()
' SubForm.ShowDialog()
' End Using
'End Sub
'=== Form2 をモードレスで表示させる場合 ===
Private WithEvents SubForm As Form2
Private Sub Button1_Click(…
Button1.Enabled = False
SubForm = New Form2()
SubForm.Show(Me)
End Sub
Private Sub SubForm_FormClosing(…
Button1.Enabled = True
End Sub
|