Komponente greift auf andere Komponente zu -> Fehler beim Löschen



  • Hallo,

    ich habe eine Komponente CANCard geschrieben, diese greift auf einen Treiber
    zu. Als Ergänzung hab ich dann noch eine Komponente CANSettings geschrieben,
    die das User Interface zur Verfügung stellt. Man kann nun wenn man TCANCard
    und TCANSettings auf dem Formular plaziert bei CANCard1->CANSettings
    CANSettings1 auswählen (im Objektinspektor per DropDown)

    Wenn ich nun aber CANSettings1 lösche kommt ein "Abstakter Fehler" ich denke
    dadurch kommen auch meine Fehler beim kompilieren der Komponenten wenn das Projekt
    geöffnet ist.

    Mein minimal Test:

    class PACKAGE TMyTest : public TComponent
    {
    private:
        TScopeSettings *MySettings;
    
    protected:
    public:
        __fastcall TMyTest(TComponent* Owner);
    __published:
        // Eigenschaften
        __property TScopeSettings * ScopeSettings = {read=MySettings, write=MySettings};
    
    };
    

    TScopeSettings ist eine leere Komponente ohne Funktion. Ich platziere
    einmal TMyTest (MyTest1) und einmal TScopeSettings (ScopeSettings1)
    auf einem Formular. Dann wähle ich bei MyTest1->ScopeSettings ScopeSettings1
    aus. Dann lösche ich ScopeSettings1 und nun crasht es.

    Was brauch ich noch im Destruktor? Oder ist da ein ganz anderer Fehler?



  • Hallo

    kann den Fehler nachvollziehen. Ich denke das ist ein Problem der IDE, die versucht auf eine nicht mehr vorhandene Komponente zuzugreifen, weil die eine Komponente das Löschen der anderen nicht bemerkt.
    Du mußt also beim Löschen der Komponente TMySettings dies an eine eventuell vorhandene TMyTest weitergeben und dessen Eigenschaft zurücksetzen.
    Wie du das am besten machst, liegt an deinem Gesamtkonzept.

    Am besten ist es, du legts beide Komponenten in eine Datei, dann kannst du in MySettings den Verweis auf MyTest speichern und beim Löschen einfach die Verbindung auflösen.

    bis bald
    akari



  • Danke für deinen Test!

    Im schlimmsten Fall muss ich die Verbindungen halt erst zur Laufzeit herstellen.
    Das hab ich bisher noch nicht getestet, dürfte aber ja keine Probleme mehr machen.
    Was mich wundert ist, dass es bei allen Standard Komponenten immer funktioniert.

    Also z.B. auch beim TPopupMenu oder der TImageList



  • Hallo

    weiß nicht was bei den Standardkomponenten dahinter steckt. Vielleicht haben die auch ne nicht öffentliche Rückverbindung.

    bis bald
    akari


Anmelden zum Antworten