tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: CommandBottonイベント
投稿日: 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


上記に加えて、処理中はフォームを閉じられないようにしておくなどといった、
追加の制御が必要かも。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。