- ベストアンサー
VB6のCheckBoxのMouseDownでCheck1_Clickイベントが発生しない理由と解決方法
- VB6のプログラムでCheckBoxのMouseDownイベントを実行した結果、Check1_Clickイベントが発生しない問題が発生しました。この記事では、その原因と解決方法について解説しています。
- Check1_Clickイベントが発生しない原因は、Check1_MouseDownイベント内でのCheck1の値の変更にあります。具体的には、Check1_MouseDownイベント内でCheck1(0).Valueを変更すると、Check1_Clickイベントが発生しなくなります。
- Check1_Clickイベントが発生しない問題を解決するには、Check1_MouseDownイベント内でCheck1(0).Valueを変更する代わりに、Check1_Clickイベントで行いたい処理を直接実行する必要があります。具体的には、Check1_MouseDownイベント内でCheck1の値の変更のみを行い、Check1_Clickイベントでの処理は値の変更に依存しないようにする必要があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
排他処理を入れなきゃあたりまえ。 MouseDownで値を操作するのは、よくない。 チェックボックスでオプションボタンの動きがしたいわけ? もしそうなら、こんな感じ。 Private Sub Check1_Click(Index As Integer) Dim intIndex1 As Integer Dim intIndex2 As Integer Static bln処理フラグ As Boolean If bln処理フラグ Then Exit Sub End If bln処理フラグ = True intIndex1 = Index intIndex2 = Abs(Index - 1) Check1(intIndex2).Value = Abs(Check1(intIndex1).Value - 1) bln処理フラグ = False End Sub メッセージボックス出したら、以降の一連のVBに送られるメッセージは破棄されるので当然。 イベントがどのように起こるものかを理解することが必要。 KeyAsciiとKeyDowmイベントの関係でも、同様なことが起こる。
その他の回答 (2)
- fuji1
- ベストアンサー率29% (109/371)
こんにちは。 試してみたら、こんな結果になりました。 Check1_MouseDown Index : 0, Check1(Index).Value : 1, Check1(0).Value : 1 Index : 0, Check1(Index).Value : 0, Check1(0).Value : 0 Check1_MouseDown Index : 1, Check1(Index).Value : 1, Check1(0).Value : 0 Index : 1, Check1(Index).Value : 0, Check1(0).Value : 0 どこが悪いかというと、check1 の value をいじっているところです。 Select Case Index Case 0 Check1(1).Value = 0 Case 1 Check1(0).Value = 0 End Select これでいい結果になるのではないですか? 2) ですが、よくわかりません。
- taknt
- ベストアンサー率19% (1556/7783)
多分 イベントの発生順序を考慮しないといけないでしょうね。
お礼
>メッセージボックス出したら、以降の一連のVBに送られるメッセージは破棄される そういうことですか、ありがとうございます。