Fenster ohne Fensterrahmen verschieben

    • WPF

    Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von SeriTools.

      Fenster ohne Fensterrahmen verschieben

      In Windows Forms ist es ziemlich kompliziert ein Fenster zu verschieben, welches keinen Rand hat. Dort geht das zum Beispiel so:

      VB.NET-Quellcode

      1. Private ptMouseDownLocation As Point
      2. Private Sub Form1_MouseDown(...) Handles Me.MouseDown
      3. If e.Button = Windows.Forms.MouseButtons.Left Then
      4. ptMouseDownLocation = e.Location
      5. End If
      6. End Sub
      7. Private Sub Form1_MouseMove(...) Handles Me.MouseMove
      8. If e.Button = Windows.Forms.MouseButtons.Left Then
      9. Me.Location = e.Location - ptMouseDownLocation + Me.Location
      10. End If
      11. End Sub
      Die C#-Version des Quellcodes finden Sie hier auf meiner Seite.

      Ziemlich viel Code für solch eine Aufgabe, nicht?

      Zum Glück geht das in WPF viel einfacher. In das MouseLeftButtonDown-Ereignis des Fensters (oder eines Steuerelements) kommt diese eine kurze Zeile Code:

      VB.NET-Quellcode

      1. Me.DragMove()

      Das wars! Das Fenster lässt sich jetzt an allen Stellen verschieben, wo kein Steuerelement im Vordergrund ist. Hat man den Code in das MouseLeftButtonDown-Ereignis eines Steuerelements eingefügt, so lässt sich das Fenster nur mit dem Steuerelement verschieben.

      lg SeriTools
      | Keine Fragen per PN oder Skype.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SeriTools“ ()

      Auch wenn ich hier eine Mumie reanimiere:
      @SeriTools: Kann es sein, dass Dein Code für WinForms, nicht aber für WPF designed ist?
      Bei mir sieht WPF-MouseMove-Code so aus:

      C-Quellcode

      1. private void ImgMouseMove(object sender, System.Windows.Input.MouseEventArgs e)
      2. {
      3. Point position = e.GetPosition(this);
      4. double pX = position.X;
      5. double pY = position.Y;
      6. label1.Content = string.Format("x = {0} y = {1}", pX, pY);
      7. }
      bzw.

      VB.NET-Quellcode

      1. Private Sub ImgMouseMove(sender As Object, e As System.Windows.Input.MouseEventArgs) Handles ...
      2. Dim position As Point = e.GetPosition(Me)
      3. Dim pX As Double = position.X
      4. Dim pY As Double = position.Y
      5. label1.Content = String.Format("x = {0} y = {1}", pX, pY)
      6. End Sub
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!
      Er hat ja hingeschrieben, dass der MouseMove-Code Winforms ist:
      In Windows Forms ist es ziemlich kompliziert ein Fenster zu verschieben, welches keinen Rand hat. Das geht zum Beispiel so:


      Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.