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...


Anmelden zum Antworten