Zur Laufzeit erstellte Controls ansprechen


kAmBeR

Mitglied
Hallo,

mein Problem ist, dass zur Laufzeit erstellte Controls nicht ansprech bar sind.
Ich habe zwar bei Google etc. gesucht, aber nichts konkretes gefunden.

Fehlermeldung: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Die Controls, in diesem Fall PictureBox, werden erstellt, aber ich kann sie nicht direkt ansprechen.

Der Name ist z.B. picBox1.
Ein Button-Click soll den Inhalt der erstellten picBox1 löschen, aber während der Entwurfszeit kommt schon fehler, also habe ich diese Zeile hinzugefügt:

private System.Windows.Forms.PictureBox picBox1; // einfach als Test, ob es klappt

// Diese Zeile ist natürlich nicht elegant, da ich nicht nur eine, sondern beliebig viele
// Controls erstellten will

Zu Laufzeit aber kann ich immer noch nichts ansprechen.

Wie könnte ich dieses Problem lösen?

Danke im Voraus.
 

Norbert Eder

Erfahrenes Mitglied
Du machst das falsch. Folgendermaßen erstellst du ein PictureBox-Control zur Laufzeit:
Code:
System.Windows.Forms.PictureBox picBox1 = new System.Windows.Forms.PictureBox();
picBox1.Name = "picBox1";
picBox1.Location = new Point(0,0);
picBox1.Size = new Size(10, 50);
this.Controls.add(picBox1);
Mit "this" ist in diesem Fall eine Form gemeint. Willst du die PictureBox in ein Panel auf deiner Form platzieren, musst du die Zuweisung an die Controls des Panels machen:
Code:
this.panelname.Controls.Add(picBox1);
Wie du das Control dann ansprechen kannst, siehst du in dem Beispiel von mir unter http://www.tutorials.de/forum/showpost.php?p=1103311&postcount=4
 
Zuletzt bearbeitet:

broetchen

Erfahrenes Mitglied
Guten Morgen!

Controls dynamisch erstellen ist gar nicht so schwer. Du musst nur ein Control erstellen und es dann der Controls-Auflistung des Containers (Form, GroupBox, ...) hinzufügen und schon kannst du es sehen.

Um es dann auch ansprechen zu können, musst du die Controls-Auflistung durchgehen und z.B. anhand des Namens das richtige auswählen.

mfg broetchen

:eek: da war wohl einer schneller ;-)
 

the incredible Leitman

Erfahrenes Mitglied
Hallo Ihr!
Ich habe so ein ähnliches Problem:

Möchte auch während der Laufzeit noch mehrere Controls hinzufügen, jedoch ist die Anzahl vor dem Programmstart nicht bekannt!

Hab mir etwas in der Form vorgestellt:
Code:
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
 {
	 // erstelle z.B: button2
	 System::Windows::Forms::Button^ button[i] = gcnew System::Windows::Forms::Button();
	 this->Controls->Add(button[i]);

	 // nächster Button wird z.B. button3
	 i++;
}
Klar, der Code funktioniert nicht, aber vom Prinzip her möcht ich genau so etwas,
ist das irgendwie möglich?

mfG