C# Ganzes Controll Kopieren und auf eine andere einfügen.

roker002

Commander
Registriert
Dez. 2007
Beiträge
2.075
Geht das überhaupt... wenn ich z.b einen Groupbox habe, will aber alle elemente in diese Groupbox behalten und per buttonclick das ganze duplizieren. sowas überhaupt machbar? würde ja gerne selbst im inet suche aber mir fallen da keine passende stichwörter ein. :rolleyes:
 
zur Laufzeit?

Wenn ja, dann über einen Eventhandler realiseren.


z.B. so:

Code:
...
		private void createTextFeld()
		{
			TextBox textBox = new TextBox();

			textBox.Location = new System.Drawing.Point(this.startX, this.startY);
			textBox.Size = new System.Drawing.Size(311, 20);
			this.Controls.Add(textBox);
			txtbox.Add(textBox);
			this.startY += 25;
		}

		private void button1_Click(object sender, EventArgs e)
		{
			createTextFeld();
		}
 
kopieren eines ganzen kontrollelements geht dann nicht oder wie?

die lösung oben kenn ich ja auch... wollte aber wissen ob es einfacher geht :P
hab viele elemente in den groupbox... die alle erst per hand zu definieren ist schon 10 stunden arbeit oder mehr :D
 
Initialisiere die Groupbox-Komponenten doch einfach in einer For-Schleife!
 
man ... ihr versteht das nicht so einfach.... ich will keine schleifen oder so. kopie eines objektes in dem fall eines ganzes cotrol elemets mit all seinen kindern. will nur wissen ob sowas überhaupt gibt.
 
Klar sollte das gehen.
Du solltest wohl beim "obersten" Element in der Hierarchie anfangen und dich dann in dem "Baum" nach unten drucharbeiten (GroupBox enthält RadioButtons, also GroupBox zuerst kopieren, dann RadioButtons).
Jede Klasse hat ja wohl eine Kopierkonstruktor, also kann man die Objekte auch kopieren.
 
Kann man nicht einfach....

Code:
this.SourceGroupbox = new System.Windows.Forms.GroupBox();
....
....  //gesammter code was zu der groupbox gerhört
....
this.copyofsourceGB = ???

direkte zuweisung währe ja blöd... dann erstelle ich ja einen duplikat, was die auswirkung hat, dass ich wenn ich einen ändere, so ändere ich auch den zweiten.
 
Zuletzt bearbeitet:
Ich glaube nicht, daß das so funktionieren wird. Aber vielleicht lassen sich alle Unterelemente der Groupbox mit einer Schleife durchgehen und duplizieren.
 
Hallo roker,

mit folgendem Code kannst du Controls zur Laufzeit clonen, sodaß diese als eigenständige Instanzen auf der Form angelegt werden.

Code:
    private void buttonCopy_Click(object sender, EventArgs e)
    {
      // der Clone deiner GroupBox liegt nach dem Clonen über deinem Original(!), also verschiebe sie um den Effekt zu sehen
      int i = 0;
      System.Collections.ArrayList listAllControls = new System.Collections.ArrayList();
      // die GroupBox ist der Startpunkt und muss zuerst zur Liste(listAllControls) hinzugefügt werden:
      listAllControls.Add(groupBox1);
      while (i < listAllControls.Count)
      {
        // hier werden alle Controls berücksichtigt, die in deinem Haupt-Control stecken:
        Control controlOriginal = (Control)listAllControls[i];
        if (controlOriginal.HasChildren)
          listAllControls.AddRange(controlOriginal.Controls);
        i++;
        // jetzt das Clonen vom aktuellen Control (controlCurrent):
        Control controlCloned = (Control)TypeDescriptor.CreateInstance(null, controlOriginal.GetType(), null, null);
        foreach(PropertyDescriptor property in TypeDescriptor.GetProperties(controlOriginal.GetType()))
          if(property.ShouldSerializeValue(controlOriginal))
            property.SetValue(controlCloned, property.GetValue(controlOriginal));
      }
    }

Hoffe das beantwortet deine Frage...

Grüße
 
Zuletzt bearbeitet:
Zurück
Oben