MouseDown, MouseMove & MouseClick

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Pry.

    MouseDown, MouseMove & MouseClick

    Morgen,
    ich hab ein Problem mit einer Form ohne BorderStyle.
    Also ich benutze MouseDown mit SendMessage & ReleaseCapture() um die Form zu bewegen, MouseMove um abzufragen ob die Maus z.B. links unten ist und ich die Form somit vergrößern kann und nun brauche ich noch das MouseClick. Also die ersten beiden funktionieren perfekt, jedoch nicht das Click-Event. Dieses brauche ich, da ich mit GDI+ die ControlBox (Minimieren, Maximieren, Schließen) zeichnen will, jedoch wird dieses Event gar nicht aufgerufen. Erst wenn ich das MouseDown entferne klappt es, jedoch kann ich ja dann die Form nicht mehr bewegen. Gibt es einen Grund warum man diese Events nicht gleichzeitig benutzen kann oder warum klappt das nicht?
    Hi,

    habe das grad mal versucht nachzustellen, aber ohne Erfolg. Bei mir wird sowohl das Down- als auch das Click-Event ausgelöst. Hast du schonmal das Mouse-Up-Event versucht? Alternativ könntest du die ControlBoxes auch in Panels zeichnen lassen und deren Click-Event nutzen.

    Viele Grüße,
    Pry
    Dateien umbenennen und nummerieren - nichts leichter als das!

    Basic File Renamer: 100%
    Eigentlich wollte ich das ohne Panels/PictureBoxen machen, aber wenns wohl nich anders geht...Bei dir geht MouseDown und MouseClick?
    Also bei mir klappt es nicht, versuch mal diesen Code auf eine Form mit FormBorderStyle = None:

    VB.NET-Quellcode

    1. Private Declare Function ReleaseCapture Lib "user32.dll" () As Int32
    2. Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Int32, ByVal wParam As Int32, ByVal lParam As IntPtr) As Int32
    3. Private Const WM_NCLBUTTONDOWN As Int32 = &HA1
    4. Private Const HT_CAPTION As Int32 = &H2
    5. Private Sub Form1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
    6. ReleaseCapture()
    7. SendMessage(Handle.ToInt32, WM_NCLBUTTONDOWN, HT_CAPTION, 0)
    8. End Sub
    9. Private Sub Form1_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseClick
    10. MsgBox("blubb")
    11. End Sub


    Die Form kann man nun verschieben, aber wenn man draufklickt kommt die MsgBox bei mir nicht, außer ich kommentier das MouseDown-Event raus..achja, MouseUp klappt auch nicht -.-"
    Ja, das weiß ich auch. Wenn es aber auskommentiert ist, kann ich die Form ja nicht mehr bewegen...außerdem, ein Panel kann ich auch nicht benutzen da es am Ende genau das selbe wird - ich zeichne den Hintergrund und z.B. das X mit GDI+ und muss ja da auch noch das MouseDown-Event benutzen um die Form von dort aus auch zu bewegen (es werden keine großen Buttons die das Panel überdecken sondern nur ein X oder ein Kästchen usw.) und dann wird das MouseClick-Event auch nicht erkannt..

    VB.NET-Quellcode

    1. Private m_offset As Point
    2. Private m_Pos As Point
    3. Private Sub EM_MouseMove(sender As Object, e As MouseEventArgs)
    4. If e.Button = MouseButtons.Left Then
    5. m_Pos = Control.MousePosition
    6. m_Pos.Offset(mouse_offset.X, mouse_offset.Y)
    7. Location = m_Pos
    8. End If
    9. End Sub
    10. Private Sub EM_MouseDown(sender As Object, e As MouseEventArgs)
    11. m_offset = New Point(-e.X, -e.Y)
    12. End Sub

    :?:
    Und was, wenn du das MouseDown-Event auf einen explizit bestimmten Bereich eingrenzt? Sprich den Bereich, wo du die Titelleiste zeichnest?
    Dann kannst du deine Form zwar auch nur über die Titelbar verschieben, aber dein Click-Event sollte wieder funktionieren.
    Dateien umbenennen und nummerieren - nichts leichter als das!

    Basic File Renamer: 100%