タイトル | : Re^3: CommandBottonイベント |
記事No | : 12316 |
投稿日 | : 2008/05/19(Mon) 19:02 |
投稿者 | : 魔界の仮面弁士 |
> 説明が足りなく申し訳ないです。CommandBotton1_Click()で処理開始、 > CommandBotton1_Click()内で同じCommandBotton1でキャンセル出来ないかなと考えておりました。
それだけなら、ボタンを同じ座標に重ねて置いといて、Visible プロパティを 切り替えて見せた方が、処理が複雑化しなくて済むかも。
で、同一ボタンのキャンセルについては、そもそも「処理」の内容によって キャンセル可能かどうかが決まるでしょうけれども、たとえば……
Option Explicit
Private IsBusy As Boolean Private HasCancelRequest As Boolean
Private Sub CommandButton1_Click() If IsBusy = False Then If MsgBox("処理を開始します。", vbOKCancel) = vbCancel Then Exit Sub End If CommandButton1.Caption = "中止" Sample Else HasCancelRequest = True End If End Sub
Private Sub Sample() IsBusy = True HasCancelRequest = False
'実験用のダミー処理として、10秒待機 Dim d As Date d = DateAdd("s", 10, Now) Do Until Now > d Dim s As String s = FormatDateTime(Now) If Me.Caption <> s Then Me.Caption = s End If DoEvents If HasCancelRequest Then Exit Do End If Loop
If HasCancelRequest Then MsgBox "キャンセルされました" End If
CommandButton1.Caption = "開始" IsBusy = False End Sub
上記に加えて、処理中はフォームを閉じられないようにしておくなどといった、 追加の制御が必要かも。
|