5 Stimmen

Wie kann ich Windows bei gedrückter Maus verschieben?

Können wir Windows-Formulare verschieben, wenn wir mit der Maus auf der Titelleiste nach unten fahren. aber wie kann ich Windows verschieben, wenn ich mit der Maus im Formular nach unten fahre?

13voto

djdd87 Punkte 65008

Sie müssen aufzeichnen, wann die Maus unten und oben ist, indem Sie die MouseDown y MouseUp Veranstaltungen:

private bool mouseIsDown = false;
private Point firstPoint;

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    firstPoint = e.Location;
    mouseIsDown = true;
}

private void Form1_MouseUp(object sender, MouseEventArgs e)
{
    mouseIsDown = false;
}

Wie Sie sehen können, wird der erste Punkt aufgezeichnet, so dass Sie dann die Funktion MouseMove Ereignis wie folgt:

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    if (mouseIsDown)
    {
        // Get the difference between the two points
        int xDiff = firstPoint.X - e.Location.X;
        int yDiff = firstPoint.Y - e.Location.Y;

        // Set the new point
        int x = this.Location.X - xDiff;
        int y = this.Location.Y - yDiff;
        this.Location = new Point(x, y);
    }
}

0 Stimmen

Das funktioniert nicht, das Formular wird mit zufälligen Positionen verrückt, weil sich die Position auf das Formular und nicht auf den Bildschirm bezieht. Sie sollten System.Windows.Forms.Cursor.Position verwenden.

4voto

Thomas Levesque Punkte 277723

Sie können dies manuell tun, indem Sie die MouseDown Ereignis, wie in anderen Antworten erläutert. Eine andere Möglichkeit ist die Verwendung dieser kleine Gebrauchsklasse Ich habe vor einiger Zeit geschrieben. Es erlaubt Ihnen, das Fenster automatisch "beweglich" zu machen, ohne eine Zeile Code.

3voto

Hans Olsson Punkte 52909

Warten Sie auf das Ereignis, wenn die Maustaste im Formular nach unten geht, und warten Sie dann auf Mausbewegungen, bis sie wieder nach oben geht.

Hier ist ein Codeproject-Artikel, der zeigt, wie man das macht: Fenster/Formular ohne Titelleiste in C# verschieben

0voto

AlejandroAlis Punkte 334

Sie können die in MouseUp oder Down angegebene Position nicht verwenden, Sie sollten die Systemposition wie folgt verwenden

private Point diffPoint;
bool mouseDown = false;

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
  //saves position difference
  diffPoint.X = System.Windows.Forms.Cursor.Position.X - this.Left;
  diffPoint.Y = System.Windows.Forms.Cursor.Position.Y - this.Top;
  mouseDown = true;
}

private void Form1_MouseUp(object sender, MouseEventArgs e)
{
  mouseDown = false;
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
  if (mouseDown)
  {
    this.Left = System.Windows.Forms.Cursor.Position.X - diffPoint.X;
    this.Top = System.Windows.Forms.Cursor.Position.Y - diffPoint.Y;
  }
}

Das funktioniert, getestet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X