PictureBox per Mausklick dynamisch erzeugen
-
Hallo,
ich bin noch ganz frisch in VC++ und habe folgende Frage:
Kann man in Visual C++ 2008 Express-Edition eine Picture Box per Mausklick erzeugen?
Ich habe folgendes in meiner Form versucht:private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { System::Windows::Forms::PictureBox^ Box; this->Box = gcnew System::Windows::Forms::PictureBox; this->Box->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle; this->Box->SizeMode = System::Windows::Forms::PictureBoxSizeMode::StretchImage; this->Box->Location = System::Drawing::Point( 270, 212 ); this->Box->Name = "Box"; this->Box->Size = System::Drawing::Size( 160, 136 ); this->Box->TabStop = false; this->Controls->Add(this->Box); }
Könnt ihr mir bitte (gerne auch mit den notwendigen Grundlagen) helfen?
Danke
wwipfel
-
Lass' den this-Verweis beim Zugriff auf Box weg, sonst greifst du nicht auf die lokale Variable sondern auf den Klassenmember zu.
-
Danke O.o
aber jetzt habe ich nur noch eine "lokale" PictureBox oder?
Wenn ich die mit Button2 ertstellte Box durch einem anderen Button mit einem Bild füllen will, sagt mir der Compiler:
'Box': nichtdeklarierter Bezeichnerprivate: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Box->Image = Image::FromFile ("c:\\test.jpg"); // System::Threading::Thread::Sleep( 20000 ); // this->Close(); }
Wie mache ich die neue PictureBox mit dem Hauptfenster "Form1" bekannt?
-
Deklarier die Box doch zu Beginn des Form und initialisier sie dann in der Funktion... dann solltest du auch aus anderen Funktionen zugreifen können...
-
Hallo solick,
gibt es eine Möglichkeit die PictureBox mit Button2 so zu erzeugen, daß sie in der ganzen Form angesprochen werden kann?
Meine Anwendung soll ein kleines Spiel werden, bei dem der User die Anzahl der Bilder erst zur Laufzeit festlegt. Dann ist es nicht so toll, 100 PictureBoxen auf "Verdacht" zu deklarieren.
Wenn es geht, sollen die PictureBoxen "richtig" dynamisch sein.wwpifel
-
[edit]falsches Forum[/edit]
-
Mach die PictureBox in der ganzen Klasse bekannt:
using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; /// <summary> /// Zusammenfassung für Form1 /// /// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch /// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern, /// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt. /// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen /// arbeiten, die diesem Formular zugewiesen sind. /// </summary> public ref class Form1 : public System::Windows::Forms::Form { private: System::Windows::Forms::PictureBox^ _box; public: Form1(void) { InitializeComponent(); // //TODO: Konstruktorcode hier hinzufügen. // _box = nullptr; }
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { _box = gcnew PictureBox; _box->BorderStyle = Windows::Forms::BorderStyle::FixedSingle; _box->SizeMode = Windows::Forms::PictureBoxSizeMode::StretchImage; _box->Location = Drawing::Point( 70, 212 ); _box->Name = "Box"; _box->Size = Drawing::Size( 160, 136 ); _box->TabStop = false; this->Controls->Add(_box); } private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { _box = gcnew PictureBox; _box->BorderStyle = Windows::Forms::BorderStyle::FixedSingle; _box->SizeMode = Windows::Forms::PictureBoxSizeMode::StretchImage; _box->Location = Drawing::Point( 270, 212 ); _box->Name = "Box"; _box->Size = Drawing::Size( 160, 136 ); _box->TabStop = false; this->Controls->Add(_box); }
-
Hallo,
um die pictureBox in der ganzen Form bekannt zu machen, hast du die Box mit... private: System::Windows::Forms::PictureBox^ _box; ...
fest deklariert. Somit bin ich bei der Zahl der Boxen schon bei der Programmerstellung festgelegt. Gibt es eine Möglichkeit die Box in einer Funktion mit der ganzen Form bekannt zu machen?
Ist evtl. eine Lösung wie bei der VECTOR.push_back() vorgesehen?wwipfel