tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルCommandBottonイベント
記事No12311
投稿日: 2008/05/19(Mon) 17:42
投稿者0519
毎回参考にさせていただいております。
vb6での質問なんですが、

CommandButton1_()というプロシージャ内に、同じボタン(CommandBotton1)を
クリックさせたいのですがそれらしきプロパティ、メソッドが見つけきれません。
それ以前に同じプロシージャ内でこのイベントは実行可能なんでしょうか?

[ツリー表示へ]
タイトルRe: CommandBottonイベント
記事No12313
投稿日: 2008/05/19(Mon) 18:12
投稿者いな
> CommandButton1_()というプロシージャ内に、同じボタン(CommandBotton1)を

CommandButton1_()というプロシージャ内で
Call CommandBotton1_click()

と記述するとかそうゆうことですか?

[ツリー表示へ]
タイトルRe: CommandBottonイベント
記事No12314
投稿日: 2008/05/19(Mon) 18:27
投稿者魔界の仮面弁士
> vb6での質問なんですが、
> CommandButton1_()というプロシージャ内に、同じボタン(CommandBotton1)を
(Command1 ではなく)CommandButton1 という事は、VB6 は VB6 でも、
Office 等に付属の VBA の事を指しているのかな…?

> クリックさせたいのですがそれらしきプロパティ、メソッドが見つけきれません。
> それ以前に同じプロシージャ内でこのイベントは実行可能なんでしょうか?
…あまり望ましい処理では無いような。
そもそも何故、そのような処理が必要になっているのでしょうか?

一応、ボタン(のValue)に True を代入するなどすれば Click イベントが発生しますが、
それによって、再度 Click のプロシージャ自身が呼び出される事になるので、
処理が無限に呼びされてしまう事が無いよう、気を付けてくださいね。


Private Static Sub CommandButton1_Click()
    Dim n As Integer
    If n = 0 Then
        ListBox1.Clear
    End If
    
    n = n + 1
    ListBox1.AddItem "クリック! (" & CStr(n) & "回目)"

    If n >= 5 Then
        n = 0
    Else
        '5回まで、自動的に再クリック
        CommandButton1 = True
    End If
End Sub

[ツリー表示へ]
タイトルRe^2: CommandBottonイベント
記事No12315
投稿日: 2008/05/19(Mon) 18:35
投稿者0519
いなさん、魔界の仮面弁士さん、
アドバイス有難うございます。

説明が足りなく申し訳ないです。CommandBotton1_Click()で処理開始、
CommandBotton1_Click()内で同じCommandBotton1でキャンセル出来ないかなと考えておりました。

[ツリー表示へ]
タイトルRe^3: CommandBottonイベント
記事No12316
投稿日: 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


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

[ツリー表示へ]