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