コマンドボタンのイベントを回避するには?

解決


BOOW  2002-03-27 19:10:55  No: 104155  IP: [192.*.*.*]

初めて書きこみさせていただきます。大変困っています教えていただけないでしょうか?
あるコマンドボタンを押されたら、まずそのコマンドボタンを非表示(Visible=Faules)にして、さらに無効(Enable=Faules)にし、ある処理を行ってその後それぞれをTrueにしています。
そこで、その処理中にコマンドボタンがあったところをクリックするとその処理が終わったら、又その処理をクリックされた数だけ繰り返します。
そのコマンドボタンが無効の状態で発生したイベント割り込みをクリアするにはどうしたらいいのでしょうか?
それとも、考え方がおかしいだけなのでしょうか?

編集 削除
とろ  2002-03-27 22:45:54  No: 104156  IP: [192.*.*.*]

おそらく、フラグで制御するのが一番簡単ですね。

Option Explicit
Private blnFlg  As Boolean

Private Sub Command1_Click()

    If blnFlg = True Then
        Exit Sub
    End If
    
    With Command1
        .Visible = False
        .Enabled = False
    End With
    
    '処理・・・・・・・・・・・・
    
    With Command1
        .Visible = True
        .Enabled = True
    End With
    
    blnFlg = False
    
End Sub

みたいな!

編集 削除
BOOW  2002-03-28 09:03:31  No: 104157  IP: [192.*.*.*]

とろさん、助言ありがとうございます。
書き込みは初めてだったのでこのようにアドバイスをいただけると何かとてもうれしいです。
しかし、この方法は一度試みてはいるのですがコマンドボタンのプロシージャを抜けるころにはフラグがFalse(僕がスペルミスしていたみたい・・恥ずかしい)になっているので、End Subで抜けるともう一度走り出しちゃったのですが・・・・
何か基本的な見逃しでもしているのでしょうか?

編集 削除
うち  2002-03-28 12:53:12  No: 104158  IP: [192.*.*.*]

コマンドボタンのClickイベント中に押された
マウスイベントを無効にするには、コマンド
ボタンを無効(Enableプロパティ = False)状態
にしてイベントを受取ってあげれば良いです。
無効状態の時にマウスクリックしても、イベントは
発生しませんよね。
具体的には次のようになります。
ただ、DoEventsはその他の弊害も考えないといけないので
多用しない方が良いと思いますが...。

Private Sub Command1_Click()

 Dim I As Long
 Static iCount As Integer

    Command1.Enabled = False   ' ここで無効にして
    Command1.Visible = False
    DoEvents              ' ボタンを見えなくするために入れた

    ' なんかの忙しい処理のかわり
    For I = 1 To 10000000
    Next I

    ' クリックイベントを受けとてないことを確認するため
    ' クリックイベント発生ごとに数字をカウントして表示
    iCount = iCount + 1
    Label1.Caption = CStr(iCount)

    DoEvents                   ' 上の長い処理中に発生した
                               ' イベントを吐き出す
    Command1.Enabled = True    ' ボタンを有効にする
    Command1.Visible = True

End Sub

編集 削除
BOOW  2002-03-28 14:06:44  No: 104159  IP: [192.*.*.*]

解決しました。
うちさん、どうもありがとうございます。

編集 削除