Wert von Form2(ComboBox) in Form1(StringGrid) überschreiben
-
Hallo,
ich habe 2 Forms, in meinem ersten ist ein StringGrid und in meinem zweiten eine ComboBox. Wenn ich in dem StringGrid eine Zelle markiere öffnet sich das zweite mit der ComboBox. das hab ich so gemacht:
if(Col==1) { Form2= new TForm2(this); Form2->Show(); }nun möchte ich gern in der ComboBox etwas auswählen und mit Add in das StringGrid hinzufügen.Auswählen mache ich alles schon über den AddButton.
void __fastcall TForm2::AddButtonClick(TObject *Sender) { //bei Auswahl Index merken und in PortsGrid schreiben int ComboBox_index = ComboBox->ItemIndex; Form1->PortsGrid->Cells[0][1] = ComboBox->Items->Strings[ComboBox_index]; Close(); }Aber wenn ich das mit dem: Form1->PortsGrid->Cells[0][1] = ComboBox->Items->Strings[ComboBox_index]; stehen lasse, kommt immer ein Fehler! Wie kann ich das besser eintragen in meinen StringGrid auf Form1?
PS: Hab schon in den FAQs nachgeschaut und die Möglichkeiten auch schon ausprobiert, aber hat nicht funktioniert!
-
newfreak schrieb:
kommt immer ein Fehler!
Welcher Fehler!?
Und "hat nicht funktioniert" ist auch keine ausreichende Problembeschreibung.
-
Error:
Project name.exe raised exception class EAccessViolation with message "Access violation at address 004C4219 in module name.exe! Read of address 00000000.Process stopped. Use Step or Run to continue!
-
Hallo
Read of address 00000000
ich vermute nicht initialisierter Zeiger/Speicher oder sowas aehnliches
WO tritt der Fehler den auf (Code)MfG
Klaus
-
Wenn ich das Programm laufen lasse. Und auf Add im zweiten Form gehe. Dann kommt der fehler bei: Form1->PortsGrid->Cells[0][1] = ComboBox->Items->Strings[ComboBox_index];
void __fastcall TForm2::AddButtonClick(TObject *Sender) { //bei Auswahl Index merken und in PortsGrid schreiben int ComboBox_index = ComboBox->ItemIndex; Form1->PortsGrid->Cells[0][1] = ComboBox->Items->Strings[ComboBox_index]; Close(); }
-
du kannst auch mit
Form1->PortsGrid->Cells[0][1] = ComboBox->Text;
nur die aktuelle Auswahl der ComboBox übergeben
-
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?