Form1 Datei Laden und in Form4 den ComboBox1 eintrag ändern.



  • Hallo

    Ich habe ein Problem erstmal kurze erklärung zu dem Program:

    Ich schreibe ein kleines Projekt für mich selbst.
    Ich habe das Hauptfenster (Form1) und ein Fenster für Einstellungen (Form4).

    Wenn man in Form4 die ComboBox1 (diese dient als Sprachen wechsel Deutsch Englisch Holländisch) auf Eintrag 0 für Deutsch stellt und dann den Speichern button drückt, speichert er den Text "Deutsch" in einer Datei ab.

    Bei dem Programm aufruf sprich Form1 soll er die Datei in einen RichEdit1 Fenster laden, macht er auch.

    Jetzt und hier ist das Problem wenn da nun Englisch drinne steht soll er in Form4 die ComboBox1 auf den Eintrag 1 setzen damit ich gleich sobald das Programm aufgeht, alles in englisch habe.

    Er gibt mir aber eine Fehlermeldung

    Erste Gelegenheit für Exception bei $7C812A7B. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 00401BA8 in Modul 'Project1.exe'. Lesen von Adresse 0000039C'. Prozess Project1.exe (1340)
    

    Anscheinend muss Form 4 wohl geöffnet sein um es zu ändern denke ich mal aber keine ahnung...

    hier mein code:

    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    RichEdit1->Lines->LoadFromFile("..\\data\\config");
    if (RichEdit1->Lines->Strings[0] == "Deutsch") {
    Form4->ComboBox1->ItemIndex = 0;
    }
    
    if (RichEdit1->Lines->Strings[0] == "Englisch") {
    Form4->ComboBox1->ItemIndex = 1;
    
    }
    if (RichEdit1->Lines->Strings[0] == "Holländisch") {
    Form4->ComboBox1->ItemIndex = 2;
    }
    
    }
    //---------------------------------------------------------------------------
    

    Kann mir jemand bitte helfen ?!
    Hab schon in der SuFu geschaut aber hab nichts gefunden was mir helfen würde 😞

    Liebe Grüße



  • Hallo

    Wenn der Konstruktor von Form1 aufgerufen wird, ist die Instanz von Form4 noch nicht erstellt, deshalb die Zugriffsverletzung.

    Pack den Quellcode aus dem Konstruktor in eine eigene Methode, und ruf diese auf, wenn alle Forms erstellt wurden.

    bis bald
    akari



  • Huhu

    Danke dir für deine Antwort 🙂

    Eine Methode ist wohl sowas wie ein Prozess oder ? das ich einfach nur diese Methode aufrufe und er führt die Handlung aus.

    Wie schreibt man so eine Methode ?
    Ist das sehr aufwendig ?
    gibt es da beispiele ?

    Liebe Grüße



  • <wohlwollenderratgebermode> Leg' die VCL beiseite, lern C++ mit einem guten(tm) Buch und komm dann zur VCL zurück 😉 </wohlwollenderratgebermode>

    #include <iostream>
    
    class foo_t {
        public:
            void doit_baby(); //  <-----+
    };                        //        | Das ist eine Methode.
                              //        |
    void foo_t::doit_baby()   //  < ----+
    {
      std::cout << "yeah!\n";
    }
    
    int main()
    {
      foo_t foo;
      foo.doit_baby();  // Das ist der Aufruf für eine Instanz.
    }
    

Anmelden zum Antworten