• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CheckBoxのMouseDown)

VB6のCheckBoxのMouseDownでCheck1_Clickイベントが発生しない理由と解決方法

このQ&Aのポイント
  • 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イベントでの処理は値の変更に依存しないようにする必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • 2ch
  • ベストアンサー率51% (64/125)
回答No.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イベントの関係でも、同様なことが起こる。

absurd0rt
質問者

お礼

>メッセージボックス出したら、以降の一連のVBに送られるメッセージは破棄される そういうことですか、ありがとうございます。

その他の回答 (2)

  • fuji1
  • ベストアンサー率29% (109/371)
回答No.2

こんにちは。 試してみたら、こんな結果になりました。 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)
回答No.1

多分 イベントの発生順序を考慮しないといけないでしょうね。

関連するQ&A