Form mit Buttons usw. zur Laufzeit erstellen
-
hab das ausprobiert mit der zeile...
formf->Visible = true;wen ich das weg lasse, dann kann ich nur die eine form erstellen.
aber nicht auf die hauptform, noch mal auf den button klicken, um weitere geichzeitig zu erstellen.Selbstverständlich kannst du von einer bereits vorhandenen Formklasse jederzeit auch weitere Instanzen erzeugen, und diese Instanzen auch weiter mit dynamischen Controls belegen. Das ist dann sozusagen das Optimum aus Komfort und Dynamik.
das ist gut zu wissen, hört sich an als ob das das einfachste von der welt were wie du das schreibst, aber wie stell ich das an
wie erstellt man eine instans, aus einer formklasse?

-
Hallo
wen ich das weg lasse, dann kann ich nur die eine form erstellen.
aber nicht auf die hauptform, noch mal auf den button klicken, um weitere geichzeitig zu erstellen.Ja das liegt an dem ShowModal. Das gesagt das die Anwendung außerhalb des aufgerufenen Forms angehalten wird, bis das Form wieder geschlossen wird.
Du kannst statt demformf->ShowModal(); delete formf;auch
formf->Show();oder meinetwegen
formf->Visible = true;schreiben.
Allerdings sollte das erst passieren nachdem alle Controls erstellt wurden.
Und auf diese Art wird das Form auch nicht so ohne weiteres wieder freigegeben. Du müßtest zum Beispiel mit dem Close-Event das Löschen ausführen.wie erstellt man eine instans, aus einer formklasse?
TForm2* new_form2 = new TForm2(Application);Jetzt weißt du warum ich sage, das hier Grundkenntnisse in Speiucherverwaltung und OOP notwendig sind.
bis bald
akari
-
moin,
also das
TForm2* new_form2 = new TForm2(Application);versteh ich nicht

hab jetzt angefangen eine erstellte form, aus der form datei zu bearbeiten..
und hab ein problem

warum nimmt er das den nicht an?
..... TComboBox *ComboBox1; ComboBox1 = new TComboBox(quik1); ComboBox1->Parent = quik1; ComboBox1->Left = 272; ComboBox1->Top = 32; ComboBox1->Width = 145 ; ComboBox1->Height = 21; ComboBox1->ItemHeight = 13; ComboBox1->ItemIndex = 0 ; ComboBox1->TabOrder = 10; ComboBox1->Text = "Auswahl"; [b]ComboBox1->Items.Strings = ( '1' '2' '3' '4' '5');[/b]ich glaube da fehlt mir noch das onchange event, das dachte ich mir verweise ich auf die eigentliche erstellte form.
also alle events werden in der einen form deklariert sein und die erstelten buttons usw. greifen drauf zu(wie im faq's beispiel).ich weis nicht ob es zu umständlich ist, aber das ist der weg den ich noch meistern kann mit meinen kenntnissen und verständnis

danke für jede kleine hilfe
-
Hallo
versteh ich nicht...
TForm2* /* Deklariert einen Pointer auf eine Instanz der Klasse TForm2*/ new_form2 /*Der Pointer bekommt den Namen new_form2. Du kannst hier auch andere Namen nehmen*/ = new TForm2( /* Es wird eine neue Instanz von der Klasse TForm2 erstellt und den Pointer zugewiesen */ Application /* Dem Form wird das Application-Objekt zugewiesen, damit sich dieses um da Löschen der Form-Instanz kümmert. Du kannst auch NULL übergeben, bist dann aber selbst für das Löschen verantwortlich*/ );warum nimmt er das den nicht an?...
Weil das noch nie gültiges C++ war, und auch nicht bei per IDE erzeugten Comboboxen gehen würde.
Entweder soComboBox1->Items->Add("1"); ComboBox1->Items->Add("2"); ComboBox1->Items->Add("3"); ComboBox1->Items->Add("4"); ComboBox1->Items->Add("5");oder so
ComboBox1->Items->Text = "1\r\n2\r\n3\r\n4\r\n5";bis bald
akari
-
Hallo
ich glaube da fehlt mir noch das onchange event, das dachte ich mir verweise ich auf die eigentliche erstellte form.
also alle events werden in der einen form deklariert sein und die erstelten buttons usw. greifen drauf zu(wie im faq's beispiel).Ja genauso würde ich das auch machen, das ist sehr bequem.
Halte dich da einfach an die FAQ-Beiträge, wie du die Controls in den Eventmethoden auswerten kannst.bis bald
akari
-
moin,
das klappt wunderbar mit dem ersten beispiel
ComboBox1->Items->Add("1"); ComboBox1->Items->Add("2"); ComboBox1->Items->Add("3"); ComboBox1->Items->Add("4"); ......werde das auch verwenden, find ich übersichtlicher, danke vielmals

danke für die erläterung der zeile
TForm2* new_form3 = new TForm2(Application);hab sie versucht in einen button1click event zu setzen, habe mir eine zweite form erstellt und dachte das er die form2 durch klicken des buttons erstellt.
aber das klappt nicht, wie soll ich den die zeile einbinden?
-
Hallo
Die Zeile erzeugt eine Form-Instanz, aber zeigt sie nicht an.
In den Button-Event muß also noch etwas mit ShowTForm2* new_form2 = new TForm2(Application); new_form2->ShowModal(); delete new_form2;oder
TForm2* new_form2 = new TForm2(Application); new_form2->Show();Im zweiten Fall (und nur dort) sollte allerdings die Klasse TForm2 noch den OnClose-Event benutzen, um an desen Parameter Action caFree zu übergeben. Sonst sammeln sich da Instanzen.
bis bald
akari
-
Macht er auch, aber vermutlich hast Du den Zeiger auch innerhalb der ButtonClick-Methode deklariert. Somit ist er beim Verlassen der Methode nicht mehr verfügbar.
akarie hat es schon richtig erkannt:
akari schrieb:
Jetzt weißt du warum ich sage, das hier Grundkenntnisse in Speiucherverwaltung und OOP notwendig sind.
-
also wen ich das in der haupt form, oder im click event setze, sagt er ...
Undefiniertes Symbol 'TForm2'
Undefiniertes Symbol 'new_form2'
Typname erwartet
In Anweisung fehlt ;habe auch versucht die zeile in die creat stelle der hauptform zu setzen.
und die show zeilen in den button click event, gibt das gleiche problem
ja mir fehlen grundkenntnisse, deshalb arbeite ich ja dran

-
Nun ja, die Grundlagen solltest Du beherrschen, bevor Du dich an GUI-Programmen unter Windows versuchst.
-
hawkdz schrieb:
also wen ich das in der haupt form, oder im click event setze, sagt er ...
Undefiniertes Symbol 'TForm2'
Undefiniertes Symbol 'new_form2'
Typname erwartet
In Anweisung fehlt ;Du must natürlich noch den Header von TForm2 dort includen, wo du es aufrufen willst.
bis bald
akari
-
ach sorry mein fehler hab der form2 die unit1 includet, aber vergessen der form1 die unit2 zu includen

das ist ja genial akari danke dir vielmals!!!!
