7 Stimmen

C# Form Move Stopped Ereignis

Gibt es ein Ereignis in C#, das ausgelöst wird, wenn das Formular STOPPEN verschoben wird. Nicht während es sich bewegt.

Wenn es kein Ereignis für es gibt, gibt es eine Möglichkeit, es mit WndProc zu tun?

19voto

Adam Ruth Punkte 3457

Das ResizeEnd-Ereignis wird ausgelöst, nachdem eine Bewegung beendet wurde. Vielleicht können Sie das verwenden.

0 Stimmen

Bei dieser Lösung gibt es ein Problem. Wenn das Formular durch Ändern der Koordinaten verschoben wird, wird dieses Ereignis nicht ausgelöst.

0 Stimmen

Auch wenn sich der Fensterstatus ändert

2voto

Fredrik Mörk Punkte 151006

Dies ist keine ausfallsichere Lösung, aber es ist reines .NET und es ist ganz einfach. Fügen Sie Ihrem Formular einen Timer hinzu und stellen Sie ihn auf eine relativ kurze Verzögerung ein (100-150 ms waren für mich OK). Fügen Sie den folgenden Code für die Ereignisse Form.LocationChanged und Timer.Tick hinzu:

private void Form_LocationChanged(object sender, EventArgs e)
{
    if (this.Text != "Moving")
    {
        this.Text = "Moving";
    }
    tmrStoppedMoving.Start();
}

private void Timer_Tick(object sender, EventArgs e)
{
    tmrStoppedMoving.Start();
    this.Text = "Stopped";
}

Wenn Sie eine genauere Handhabung wünschen (genau wissen, wann die Maustaste in der Titelleiste losgelassen wird usw.), müssen Sie sich wahrscheinlich mit der Überwachung von Windows-Meldungen beschäftigen.

0 Stimmen

Für alle, die hierher kommen und ein wenig mehr über den letzten Teil dieser Antwort wissen wollen (Bestimmen, wann die Maus während einer Bewegung gedrückt und losgelassen wird), lesen Sie meine Frage, die ein wenig mehr darauf eingeht stackoverflow.com/questions/24493167/

2voto

Ich hatte das gleiche Problem mit einem Benutzer-Steuerelement, aber es hat nicht die ResizeEnd Ereignis. Die Lösung, die funktionierte, ist, die WndProc-Methode zu überschreiben und auf EXITSIZEMOVE zu warten.

Siehe Beispiel aquí

0voto

Brian Punkte 24901

Setzen Sie einfach ein Flag auf true, wenn onmove-Ereignisse ausgelöst werden. Wenn ein Mouseup-Ereignis eintritt und das Flag wahr ist, wird das Formular nicht mehr verschoben.

Ich gebe zu, dass dies wahrscheinlich nicht funktionieren wird, wenn ein Benutzer ein Formular über die Tastatur verschiebt, aber das ist ziemlich selten.

1 Stimmen

Es ist sehr unwahrscheinlich, dass das MouseUp-Ereignis ausgelöst wird, da das Verschieben des Formulars normalerweise über die Titelleiste erfolgt und Mausereignisse nicht für Mausoperationen in diesem Bereich ausgelöst werden.

0 Stimmen

Das Mouseup-Ereignis wird nicht ausgelöst, wenn Sie das Formular aus der Titelleiste verschieben.

0voto

user6474751 Punkte 1

Ich habe das ResizeChanged-Ereignis getestet, und es funktioniert gut, aber ich kenne die Beziehung zwischen Verschieben und Größenänderung nicht, aber es funktioniert bei mir

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