Ich habe versucht, alle Informationen zu verstehen, und ich bin verloren. Ich habe mir Delphi (Pascal), C, C ++, Java angesehen ... nichts ist klar. Nach einem Monat ist dies das Problem, wie ich es sehe. Ich bin vielleicht völlig aus der Bahn geraten, also sag es mir bitte ... höflich, bitte.
Ein Ereignisabsender, ein Fänger, solange der Absender den Fänger registriert. Ich habe 4 Dialogfelder, die jedes Mal aktualisiert werden müssen, wenn sich eine Datei (deren Bearbeitungscode sich in einem anderen Modul als den 4 Dialogfeldern befindet) ändert. Ich überlegte, ob ich jedes auf die altmodische Weise aktualisieren sollte, aber dann schaute ich mir Delphi-Ereignisse und die Behandlung von Nachrichten an. Wir werden sehen:
Datei F (Der Absender) ist mit dem Lesen fertig und sollte die Dialoge 1..4 darüber informieren, dass jetzt Daten für sie angezeigt werden und der Benutzer damit spielen kann. Was ist das beste?
Versuchen Sie, die Dialoge 1..4 als Listener zu registrieren, und lässt der Absender irgendwie ein OnUpdatedDataEvent auslösen?
Versuchen Sie, eine Nachricht systemübergreifend zu senden, in der Hoffnung, dass die Dialoge 1..4 sie abfangen?
Beachten Sie, dass das Ereignis die Dinge gekoppelt hält, während Nachrichten nicht ... und ein Problem beim Debuggen sind.
Und ich frage mich, wie der Codeblock Datei 4 Listener (die Dialogfelder) registrieren kann?
Was ich sehe, ist die Möglichkeit eines Kaskadenanrufs, was bedeutet, dass der Anrufer einen Hörer anruft, der den nächsten anruft ... bis er das Ende der Kette erreicht. Ich frage mich sogar, ob das überhaupt möglich ist.
Ein Beispiel:
Angenommen, Datei F ist eine Liste von Sprachen. Jetzt macht DialogBox 1 etwas mit der Liste (fügt zum Beispiel eine neue Sprache hinzu); Dieses Kombinationsfeld aktualisiert die F-Datei. Dies löst wiederum ein DataUpdatedEvent aus. Die 4 Dialogfelder enthalten beispielsweise TComboBoxen, die die Sprachliste anzeigen, wenn sie angezeigt werden. Ich möchte, dass die 4 Felder die Änderung bemerken und ihren eigenen Kombinationsfeldinhalt mit der frisch aktualisierten Datei aktualisieren ... ohne sich Gedanken darüber machen zu müssen, wie die Kombinationsfelder wissen, dass sie ihren Inhalt aktualisieren müssen. Wenn es wie vorgesehen funktioniert, wird der Parameter Sender übertragen und das Dialogfeld, das das dataUpdateEvent ausgelöst hat, wird umgangen, da es bereits aktualisiert wird. Immerhin sollte ein if sender = self dann weiter zum nächsten Event-Handler einfach zu implementieren sein.
All das, weil ich mein Gehirn trainieren möchte ... um Alzheimer zu verhindern, nicht sehr erfolgreich, könnte ich hinzufügen.