Announcement

Collapse
No announcement yet.

Fenster ohne Titelleisete verschieben - Wie Fensterereignisse richtig auswerten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fenster ohne Titelleisete verschieben - Wie Fensterereignisse richtig auswerten

    Hallo

    Ich habe folgendes Problem:
    Ein Fenster ohne Titlebar soll per Klick auf das Formular verschoben werden können.

    Prinzipiell funktioniert das mit diesem Code (von http://www.planet-source-code.com):
    [highlight=vbnet]#Region "ClientAreaMove Handling"
    Const WM_NCHITTEST As Integer = &H84
    Const HTCLIENT As Integer = &H1
    Const HTCAPTION As Integer = &H2
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    Select Case m.Msg
    Case WM_NCHITTEST
    MyBase.WndProc(m)
    If m.Result = HTCLIENT Then m.Result = HTCAPTION
    Case Else
    MyBase.WndProc(m)
    End Select
    End Sub
    #End Region[/highlight]

    Das Problem ist folgendes. Es gibt ein Kontextmenü. Dieses öffnet sich nur, wenn ich auf ein Label innerhalb des Fensters rechtsklicke. Das verschieben des Formulars geht nur, wenn ich auf eine freie Stelle im Formular klicke.

    Wie muss ich der Code aussehen, damit beides ordnungsgemäß funktioniert?

    Gruß kleinerbub

  • #2
    Wo ist denn das Problem? Öffnet sich das Kontextmenü nicht?

    Wie auch immer, dieser Alternativcode ist zwar "oldschool", aber er macht keine mir bekannten Probleme:
    [highlight=vbnet]
    Dim DragMode As Boolean
    Dim DragStartX As Long
    Dim DragStartY As Long

    Private Sub Form_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
    If e.Button = Windows.Forms.MouseButtons.Left Then
    DragMode = True
    DragStartX = MousePosition.X - Me.Location.X
    DragStartY = MousePosition.Y - Me.Location.Y
    End If
    End Sub

    Private Sub Form_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
    If DragMode = True Then
    Me.Location = New Point(MousePosition.X - DragStartX, MousePosition.Y - DragStartY)
    End If
    End Sub

    Private Sub Form_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
    DragMode = False
    End Sub[/highlight]

    Comment

    Working...
    X