UserControls in Panel bewegen
-
Hi,
habe folgendes Problem:
Ich füge eigene UserControls während der Laufzeit zu einem Panel hinzu und abonniere eigene Mouse-Events, um diese Controls zu verschieben. Dies funktioniert beim ersten hinzugefügten Control auch einwandfrei, nur wenn ich (n>1)-Steuerelemente vom selben Typ hinzufüge, lässt sich nur dass zuletzt hinzugefügte Steuerelement noch richtig verschieben, das (n-1)te Steuerelement hüpft wie auf Speed rum und alle davor eingefügten haben dann die Location -int.Max.
hier mein Verschiebe-Code:
void station_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { mouseDown = true; clickMousePos.X = e.X; clickMousePos.Y = e.Y; //this.Cursor = Cursors.Hand; } } void station_MouseMove(object sender, MouseEventArgs e) { if (mouseDown) { ((ctrlStation)sender).Left = (((ctrlStation)sender).Left + e.X) -clickMousePos.X; ((ctrlStation)sender).Top = (((ctrlStation)sender).Top + e.Y) -clickMousePos.Y; } } void station_MouseUp(object sender, MouseEventArgs e) { this.Cursor = Cursors.Default; rtbInformation.Text += ((ctrlStation)sender).station.Name + " " + ((ctrlStation)sender).Location.ToString() + "\r\n"; mouseDown = false; }
woran kann das liegen?
MastaZulu
-
Du kannst das auch Windows erledigen lassen, einfach WM_NCHITTEST abfangen (WndProc des UserControls überschreiben) und Windows mittels HTCAPTION glauben lassen es hätte die Titelzeile eines Fensters erwischt
google findet mit "WM_NCHITTEST HTCAPTION C#" bestimmt auch Quellcode oder zumindest brauchbare Ansätze.
Bei der Methode hat man auch keine Probleme mit Mouse-Captures etc. und das ist glaube ich auch nur sehr wenig Code...