Label per Drag&Drop verschieben

Hallo,
ich möchte im Formular ein Label herumschieben können. Hab schon viel versucht und probiert komme aber nicht zu einem guten Ergebnis.

Momentan hab ichs so:

Point _lastMouseLocation;
bool isdragging = false;

private void lblgleich_MouseDown(object sender, MouseEventArgs e)
{
isdragging = true;
_lastMouseLocation = e.Location;
}

private void lblgleich_MouseUp(object sender, MouseEventArgs e)
{
isdragging = false;
}

private void lblgleich_MouseMove(object sender, MouseEventArgs e)
{
if (isdragging == true)
{
lblgleich.Left = lblgleich.Left + (e.X - _lastMouseLocation.X);
lblgleich.Top = lblgleich.Top + (e.Y - _lastMouseLocation.Y);
_lastMouseLocation = e.Location;
this.Invalidate();
}
}

Mit dieser Lösung ruckelt das Label aber wie wild und geht nur ganz langsam in die richtung der maus …
Könnte mir bitte wer helfen?

DANKESCHÖN :smile:

_lastMouseLocation = e.Location;

Mach die Zeile mal raus bei MouseMove.
Und dann benennst du die Variable am besten noch in _initialMouseLocation o.ä. um.
Es ist dann die Klickposition der Maus innerhalb des Labels (d.h. wenn du in die Mitte eines 10*10 Label klickst ist der Wert X=5, Y=5).

Ergänzend kannst du dir dann auch mal die Methoden
PointToScreen, PointToClient und MousePosition anschauen.

Grüße
Pako

PAKO du bist ein Wahnsinn!!! DANKE, danke, und nochmals DANKE!!! es funktioniert!!

ok, es hat sich doch noch ein kleines problem aufgetan …

das ganze funktioniert nämlich nur perfekt wenn ich kein hintergrund-bild einstelle und der hintergrund auch nicht transparent ist.

mein problem ist nun, bei mir MUSS der Hintergrund (des steuerelments auf dem die labels bewegt werden) transparent sein.

hat jemand eine idee, wie ich auch dieses problem lösen kann? ein geschickt plaziertes invalidate() tuts nämlich leider nicht (bzw ich plazier meine invalidates falsch^^)

danke!

Was meinst du mit „funktioniert nicht mehr“?
Bei mir ändert ein Hintergrundbild oder Transparenz nichts an der Funktion.

Auf was für einem Control bewegst du die Labels?

Grüße
Pako

Also ich hab eine Form, auf der ein Usercontrol ist. Die Form hat ein BackgroundImage, das Usercontrol ist transparent.

Auf dem Usercontrol bewege ich Labels und CommandButtons (die jeweils auch ein BackgroundImage haben, falls das wichtig is).

wenn ich nun beim Usercontrol den hintergrund auf transparent schalte, damit man das bild auf der form sieht, flackert das Hintergrundbild der form beim verschieben der Buttons und die Steuerelmente die ich verschiebe, verschwinden teilweise oder es gibt so einen „zieh-effekt“ wie als ob nicht schnell genug aktualisiert werden würde.

mfg wotan

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

wenn ich nun beim Usercontrol den hintergrund auf transparent
schalte, damit man das bild auf der form sieht, flackert das
Hintergrundbild der form beim verschieben der Buttons und die
Steuerelmente die ich verschiebe, verschwinden teilweise oder
es gibt so einen „zieh-effekt“ wie als ob nicht schnell genug
aktualisiert werden würde.

mfg wotan

Bei mir tritt das Problem ebenfalls auf wenn ich ein Transparentes Control vor ein Control mit Hintergrundbild setze und in dem Transparenten Control dann ein Label verschiebe.

Vermutlich gerätst du an die Grenze der graphischen Möglichkeiten des Frameworks.
Du kannst es mit doublebuffering des Transparenten Controls versuchen, verbessert das Verhalten aber richtig flüssig kriegst du es so auch nicht.

Kannst DirectX verwenden für deinen Anwendungsfall oder jemand weiss noch etwas besseres?! Würde mich auch interessieren.

Grüße
Pako