zugriff auf komponente in anderer form verweigert



  • hi all

    meine funktion:

    void refresh(void)
    {
    ...
    Form2->ComboBox2->Clear();
    Session->GetAliasNames (Form2->ComboBox2->Items);
    Form2->ComboBox2->ItemIndex = 0;

    Form3->ComboBox1->Clear();
    Session->GetAliasNames(Form3->ComboBox1->Items);
    Form3->ComboBox1->ItemIndex = 0;
    ...
    }

    wobei form2 die eigene form ist und form3 die andere. ich habe alle cpp files includiert, funzt alles prima und erkennt auch alles. nur wenn ich compilieren will kommt "zugriffsverletzung auf adresse xxx in modul project1.exe"

    wieso?
    markiert wird die zeile wo ein zugriff auf form3 anfängt.

    wenn ich das alles in einer header packe, kommt der fehler schon bei form2, also er erkennt es quasi nicht weil es in einer header steht. wenn ich diese funktion in der form2 belasse kommt wie gesagt der fehler ab form3, wahrschjeinlich weil er es nicht kennt. aber die komponenten werden mir alle angezeigt! (bei form3-> ... )

    thx



  • ich würde mal sagen dass es daran liegt, dass du erst die box leerst, und dann versuchst mit dem inhalt irgendetwas anzufangen...



  • nein ich leere die box und fülle sie wieder. ich aktualisiere nur. diese zeilen haben ja vorher funktioniert. nur hab ich diese von den anderen formen alle zusammengetrommelt und die dann in die funktion gepackt.


  • Mod

    Hallo

    compilieren - "zugriffsverletzung auf adresse xxx in modul project1.exe"

    das passt irgendwie nicht zusammen

    starte mal mit F9 und leg dir als Breaks an (ganz am Anfang)

    MfG
    Klaus



  • im projekt project1.exe ist folgender ... zugriffsverletzung bei adresse 00403081 in modul project1.exe. lesen von adresse 00000330. prozeß wurde angehalten ...

    so besser? mit breaks hab ich nicht viel erfolg weil ich die funktion schon bei formstart aufrufe! also ich überspringe die meldung aber es funktioniert trotzdem. d.h. ich kann die boxen in den anderen formularen trotzdessen aktualisieren. aber warum dann die meldung?



  • Bonzo007 schrieb:

    im projekt project1.exe ist folgender ... zugriffsverletzung bei adresse 00403081 in modul project1.exe. lesen von adresse 00000330. prozeß wurde angehalten ...

    so besser? mit breaks hab ich nicht viel erfolg weil ich die funktion schon bei formstart aufrufe! also ich überspringe die meldung aber es funktioniert trotzdem. d.h. ich kann die boxen in den anderen formularen trotzdessen aktualisieren. aber warum dann die meldung?

    Edit: hab mal den funktionsaufruf bei on_create auskommentiert. funktioniert. jetzt bleibt die frage offen: warum?

    wieso kann ich keine funktion (bzw. diese) aufrufen wenn das projekt startet? vielleicht fehlt da ein bisschen verzögerung weil die formen nicht komplett "aufgebaut" sind?



  • Weil in der OnCreate von Form2 die Form3 noch nicht instanziert ist?!?



  • doch alle header sins includiert!



  • äh, das hast Du falsch verstanden. Du kannst in der OnCreate von Form2 nicht auf Form3 zugreifen, weil es dieses noch nicht gibt. Erst nachdem die Form2 komplett erzeugt ist (inkl. des Durchlaufs der OnCreate) wird überhaupt erst begonnen Form3 zu erzeugen. Du versuchst also auf Form3 zuzugreifen, bevor dieses instanziiert ist.

    Die Lösung des Problems hängt von verschiedenen Faktoren ab. Möglicherweise kannst Du die Funktion in der OnShow des Form2 ausführuen... (funktionieren tut es da auf jeden Fall, ist nur die Frage, ob es dort sinnvoll ist...)



  • ah verstehe, also doch so wie ich es geglaubt habe. danke dir


Anmelden zum Antworten