[C#] Controls zur Laufzeit mit der Maus verschieben

Drucken
( 5 Votes )
Hauptkategorie: Programmieren Kategorie: C#
Erstellt am 20.04.2012 Zuletzt aktualisiert am 20.04.2012 Geschrieben von Jonny132
Dem Benutzer die Möglichkeit zu geben seine Anwendung selbst zu 'designen' ist nicht schwer. Dazu müssen wir nur die jeweiligen Controls verschiebbar machen.
Dazu erstellen wir eine Globale Liste in der wir die Controls zwischenspeichern die wir verschiebbar machen wollen.
    List<Control> m_MovebleControls;
Form Load Ereignis:
    private void Form1_Load(object sender, EventArgs e)
    {
      m_MovebleControls = new List<Control>();
      m_MovebleControls.Add(comboBox1);
      m_MovebleControls.Add(button1);
      m_MovebleControls.Add(checkBox1);

      foreach (Control control in m_MovebleControls)
      {
        control.MouseMove += new MouseEventHandler(Control_MouseMove);
      }
    }
Hier initialsieren wir die Liste der zu verschiebbaren Elemente und fügen die Elemente per Add dieser Liste  hinzu. Danach iterieren wir über jene Liste und abonnieren für jedes Element das MouseMove - Event.

Control MouseMove Ereignis:
    void Control_MouseMove(object sender, MouseEventArgs e)
    {
      if (e.Button == System.Windows.Forms.MouseButtons.Left)
      {
        Control controlToMove = (Control)sender;
        controlToMove.BringToFront();
        controlToMove.Location = new Point(controlToMove.Location.X + e.Location.X - 10,
           controlToMove.Location.Y + e.Location.Y - 10);
      }
    }
Hier überprüfen wir nur, ob die Linke Maustaste gedrückt wurde und casten den Sender des Ereignisses auf ein Control. Damit das Control nicht hinter den ganzen anderen Controls 'verschwindet' rufen wir noch .BringToFront() des Controls ab und setzten die Location des Controls etwas versetzt auf die aktuellen Mauskoordinaten.

Das war schon alles. Nun könntet ihr noch Persistenz im Form-Load und Form-Close für die Controls einbauen und dem selberdesignen der Forms vom Benutzer steht nichts mehr im Wege.

    Veröffentlichen Sie ihre Kommentare ...