Anzeige

Zur Laufzeit erstellte Controls ansprechen


#1
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
#2
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
#3
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 ;-)
 
#4
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
 
Anzeige

Neue Beiträge

Anzeige