Wert von Form2(ComboBox) in Form1(StringGrid) überschreiben
-
naja das will ich ja auch, es soll eben ein Item ausgewählt werden und zurück in das Grid auf dem anderem Form geschrieben werden!
-
Sorry hatte mich verlesen, hab das ausprobiert und es kommt genau derselbe Fehler!
-
[quote="newfreak"]
if(Col==1) { Form2= new TForm2(this); // hier liegt vermutlich der Fehler Form2->Show(); }Form2 ist bereits eine globale Variable. Diesen solltest Du nicht mehr verwenden, es sei denn, Du nimmst das Form aus der Liste automatisch zu erzeugender Formular heraus und erzeugst es mit:
Application->CreateForm(__classid(TForm2), &Form2);Hierbei ist dann allerdings sicher zu stellen, dass das Formular nicht mehrfach erzeugt wird, repektive das Formular muss von dem erneuten Erzeugen gelöscht werden.
Grüße
-
aber das Form 2 existiert doch schon. Soll ja eigentlich nur aufgerufen werden. Wenn ich es aber nur mit Form2->Show() mache kommt der gleiche Fehler wie oben schon mal genannt.
hab deine version ausprobiert, aber da schließt sich bei mir dann die komplette anwendung!
-
bei mir funktioniert das einwandfrei, ein StringGrid auf Form1 und eine ComboBox und ein Button auf Form2
beim Zellen auswählen:
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect) { if(ACol==1) { Form2->Show(); } }und beim Button betätigen:
void __fastcall TForm2::Button1Click(TObject *Sender) { Form1->StringGrid1->Cells[0][1] = ComboBox1->Text; Close(); }Grüße,
Linnea
-
genauso hab ich es auch, aber da kommt immer dieser fehler!

-
welche dateien hast du included?
-
Setz mal auf die Zeile Form2->Show(); einen Haltepukt und steppe mit Shift + F7 durch die einzelnen Zeilen, dann solttest Du sehen können, in welcher Zeile der Fehler ausgelöst wird.
-
im Form 1 und 2:
#include <vcl.h>
#pragma hdrstop#include "Unit1.h"
#include "Unit2.h"versuchs am besten nochmal mit ner komplett neuen Anwendung
-
hmm das hab ich auch includiert!
-
Hat auch nach allem neu machen nicht funktioniert!
-
Hab mal debuggt und der Fehler tritt bei der Zeile auf:
Form1->PortsGrid->Cells[0][1] = ComboBox->Items->Strings[ComboBox_index];
-
und welchen Wert hat der Index? -1? Dann hast Du nichts ausgewählt und kannst bestenfalls ComboBox1->Text zurückgeben.
-
Der Index ist 0, weil ich das erste Element ausgewählt habe
-
ok, was fügst Du wie in die ComboBox ein?
-
Hallo an alle, die mir hier geholfen haben. Ihr hattet schon alle Recht. Es funktioniert so. Nur bei meinem Projekt nicht, weil in dem Projekt, wo ich das jetzt einfügen soll, einige Funktionen umgeschrieben wurden. Und da hat man die Funktionen auch mit etwas umgeschrieben, deswegen klappt das nicht so. Hab es mir dann von einem aus meiner Firma erklären lassen!
Aber vielleicht könnten wir in dem Thread ja gleich noch weitere Fragen klären. Schließlich scheint ihr ja die absoluten Profis zu sein. Also ich hab jetzt in meiner Form2.h eine Funktion
void InitDialog(TStrings* ComList,int Index), da soll ich irgendwie die Daten aus der ComboBox von meinem Form1 direkt hinein transportieren. Wißt ihr wie man das macht, dass die gleichen Werte, die in der ComboBox von Form1 auch in ComboBox der Form2 stehen? Wäre lieb wenn ihr mir da helfen könntet!
Und dann muss ich noch das Form1 irgendwie ausschalten können, wenn das Form2 aktiviert wird. Also so dass man in der Zeit, wo man in Form2 etwas macht, nicht im Form1 irgendwas machen kann!Hoffe ihr habt es verstanden, bin heute etwas durcheinander!
-
newfreak schrieb:
Aber vielleicht könnten wir in dem Thread ja gleich noch weitere Fragen klären.
In Zukunft bitte die Faustregel beachten: ein Thema pro Thread, ein Thread pro Thema.
Danke!Wißt ihr wie man das macht, dass die gleichen Werte, die in der ComboBox von Form1 auch in ComboBox der Form2 stehen?
Das müsstest du nach den bisherigen Erklärungen eigentlich selbst wissen. Z.B.
Form2->ComboBox1->Items = Form1->ComboBox1->Items;Und dann muss ich noch das Form1 irgendwie ausschalten können, wenn das Form2 aktiviert wird. Also so dass man in der Zeit, wo man in Form2 etwas macht, nicht im Form1 irgendwas machen kann!
Benutze zum Anzeigen der zweiten Form ShowModal() statt Show().
-
das mit dem ShowModal() hab ich schon! Aber irgendwie kann ich trotzdem in meinem Form1 noch was machen!
Das mit dem ComboBox1 ist mir schon klar, doch das geht da nicht so. Weil da wurde doch irgendwo anders was verändert. Also muss ich das irgendwie mit merken machen. Also in Form1 was anlegen mit der ComList und dem Index, was ich dann an die Funktion void InitDialog(TStrings* ComList),int Index) übergeben muss. Darin muss ja irgendwie eine Zuweisung stattfinden. Aber momentan habe ich keine richtig Ahnung was man von mir will! Sorry, deswegen kann ich es auch nicht so richtig beschreiben! Aber ich werde morgen alle Varianten, die man mir anbietet versuchen!
Und zu dem eine Frage pro Thread, ja ich werde mich beim nächsten Mal dran halten. Nur irgendwie hat es doch alles damit zu tun!