【解決方法】VB.NET でマウス ホバー イベントのフォームのコントロール ボックスを処理する方法

プログラミングQA


マウスホバーイベントとマウスリーブイベントを使用して、VB.NetでForm1のコントロールボックスを処理するコードを作成しましたが、機能しません。 何が間違いなのか誰か教えてもらえますか?

私が試したこと:

Private Sub Form1_MouseLeave(sender As Object, e As EventArgs) Handles MyBase.MouseLeave
        Me.ControlBox = False
    End Sub

    Private Sub Form1_MouseHover(sender As Object, e As EventArgs) Handles MyBase.MouseHover
        Me.ControlBox = True
    End Sub

解決策 1

私にとって、このコードはうまく機能しています。
フォーム上にもいくつかのコントロールがあると思います。 マウスがこれらのいずれかの上に移動すると、フォームから離れます。
コントロールボックスも表示したい場合は、このコントロールの各 Hover-Event を Form1_MouseHover-Method にも追加する必要があります。
おそらく、Form1_MouseLeave が本当に Leave-Event を検出しているかどうかも確認する必要があります。
マウスがフォームまたはそのコントロールのいずれかの上にあることを「認識」するメソッドを作成することをお勧めします…

これは、 Form に属する Timer で動作する簡単に作成されたコードサンプルです。

VB
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
     Dim p As Point = PointToClient(MousePosition)
      If (p.X >= 0) And (p.X < Width) And (p.Y >= 0) And (p.Y < Height) Then CheckBox1.Checked = True Else CheckBox1.Checked = False
 End Sub

タイマーに短い間隔 (100 ミリ秒) を設定しました。知っておくべき唯一のことは、フォーム ヘッダーと境界線がフォームのサイズ定義に属していないということです。 それらのサイズは、選択した FormBorderStyle によって異なります。 これでは、計算する必要もあります…

そしてもう一つ:

VB
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    Dim p As Point = MousePosition
    Dim r As Rectangle = Me.ClientRectangle
    r.X += Location.X
    r.Y += Location.Y
    If (p.X >= r.Left) And (p.X <= r.Right) And (p.Y >= r.Top) And (p.Y <= r.Bottom) Then CheckBox1.Checked = True Else CheckBox1.Checked = False
End Sub

コメント

タイトルとURLをコピーしました