tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルマウス左クリック中にMouseEnterが発生しない
記事No11110
投稿日: 2013/07/30(Tue) 14:07
投稿者sa
VBフォーム上にチェックボックス(Appearance=Buttonに設定)が置いてあり、
チェックボックスの上をマウスが通過した時に、マウスが左クリック状態であれば
チェックボックスのON/OFFを切り替えたいです。

MouseEnterやMouseHoverイベントを使えばいいかなと思ったのですが、
マウスクリック中はこのイベントが発生してくれません。

どんなイベントやプロパティを使ったら、「マウス通過 AND 左クリック時」
の処理を記述できるでしょうか。

よろしくお願いします。

[ツリー表示へ]
タイトルRe: マウス左クリック中にMouseEnterが発生しない
記事No11111
投稿日: 2013/07/31(Wed) 09:27
投稿者shu
マウスクリック => マウスの左ボタンを押して離す動作
マウスボタンを押した状態だと押したときのコントロールに対しマウスのイベントが
発生しますので全てのコントロールについてMouseMoveを実装してマウスの場所より
対象チェックボックス上であるか判断してチェックを付けるようにする必要があります。


Form上にCheckBox1〜5のみある場合の例です。
Panel1などの中にある場合はMe.を対象Panel1上であるか判断してなおかつ
Me.をPanel1.にして階層的にチェックを行う必要があります。

    Private Sub AllControl_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles CheckBox1.MouseMove,
        CheckBox2.MouseMove, CheckBox3.MouseMove, CheckBox4.MouseMove, CheckBox5.MouseMove, Me.MouseMove

        Dim cl = Me.GetChildAtPoint(Me.PointToClient(Control.MousePosition))

        If TypeOf cl Is CheckBox Then
            With DirectCast(cl, CheckBox)
                Select Case e.Button
                    Case Windows.Forms.MouseButtons.Left
                        .Checked = True
                    Case Windows.Forms.MouseButtons.Right
                        .Checked = False
                End Select
            End With
        End If
    End Sub

[ツリー表示へ]
タイトルRe^2: マウス左クリック中にMouseEnterが発生しない
記事No11112
投稿日: 2013/07/31(Wed) 09:52
投稿者sa
shuさんありがとうございます。

> マウスボタンを押した状態だと押したときのコントロールに対しマウスのイベントが
> 発生します

そういう仕様でしたか。言われてみれば確かに・・
そのあたり、あいまいにしか理解していませんでした。

あと、MouseMoveイベントとGetChildAtPointを組み合わせるということですね。
確かにこれならできます。

「GetChildAtPoint」って、こんな便利なメソッドがあるのですね。
これはいろいろな場面に使えそうです。

どうもありがとうございました。

[ツリー表示へ]