MouseLeave für bestimmten Bereich

23/08/2007 - 11:14 von Stefan Simon | Report spam
Hallo,

ich habe ein Container-Control und zeichne in dieses eine Titelzeile. Diese
soll einen anderen Mauszeiger haben als die restliche Flàche des Controls.
Dazu berechne ich die Mausposition bei MouseMove. Befindet sich nun aber
direkt unterhalb der Titelzeile ein Control, wird MouseMove nicht mehr vom
Container-Control behandelt, sondern von dem Control unter der Maus.

Wie kann ich nun mitbekommen, das der Mauszeiger nicht mehr über der
Titelzeile ist? Muss ich dem Control (im Beispiel dem Label) explizit einen
Cursor zuweisen oder gibts eine bessere Lösung?

tia
Stefan

\\\ leere Form
Public Class Form1

Private pnl1 As New MyPanel
Private pnl2 As New MyPanel
Private lbl As New Label
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
pnl1.Location = New Point(10, 10)
pnl1.Size = New Size(100, 75)
pnl2.Location = New Point(120, 10)
pnl2.Size = New Size(100, 75)
lbl.Location = New Point(1, pnl2.HeaderHeight)
lbl.AutoSize = True
lbl.Text = "Testtext"
' lbl.Cursor = Cursors.Default -- <-- Machbar, aber unschön
pnl2.Controls.Add(lbl)
Me.Controls.Add(pnl1)
Me.Controls.Add(pnl2)
End Sub

Public Class MyPanel
Inherits Panel

Private pHeaderCursor As Cursor = Cursors.Hand
Private pBodyCursor As Cursor = Cursors.Default

Protected Overrides Sub OnMouseMove( _
ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseMove(e)
If e.Y < HeaderHeight Then
If (Me.Cursor <> pHeaderCursor) Then
Me.Cursor = pHeaderCursor
End If
Else
If Me.Cursor <> pBodyCursor Then
Me.Cursor = pBodyCursor
End If
End If
End Sub

Protected Overrides Sub OnPaint( _
ByVal e As System.Windows.Forms.PaintEventArgs)
e.Graphics.Clear(Color.White)
e.Graphics.FillRectangle(Brushes.Blue, _
New Rectangle(0, 0, Me.Width - 1, HeaderHeight))
e.Graphics.DrawRectangle(Pens.Black, _
New Rectangle(0, 0, Me.Width - 1, Me.Height - 1))
End Sub

Public ReadOnly Property HeaderHeight() As Integer
Get
Dim fontDesc As Single = CSng(Me.FontHeight * _
Font.FontFamily.GetCellDescent(Me.Font.Style) / _
Me.Font.FontFamily.GetLineSpacing(Me.Font.Style))
Return CInt(Math.Ceiling(Me.FontHeight + fontDesc))
End Get
End Property
End Class
End Class
///
 

Lesen sie die antworten

#1 Karsten Sosna
24/08/2007 - 06:45 | Warnen spam
Wie kann ich nun mitbekommen, das der Mauszeiger nicht mehr über der
Titelzeile ist? Muss ich dem Control (im Beispiel dem Label) explizit
einen Cursor zuweisen oder gibts eine bessere Lösung?



Hallo Stefan,
werte das MouseLeave-Event aus.
Gruß Scotty

Ähnliche fragen