Rawi - Fr 07.12.18 19:21
Titel: Anderes Formular beim Start ansprechen
Hallo zusammen,
ich habe leider Problem und weiß nicht recht, wie ich es beheben soll.
Mein Quelltext sieht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Button7Click(Sender: TObject); begin if not Fileexists(patheinst + 'farbe.txt') then begin form5.memo1.lines[0]:='Standart'; form5.memo1.lines.savetofile(patheinst + 'farbe.txt') end; if not Fileexists(patheinst + 'name.txt') then begin form5.memo2.lines[0]:=''; form5.memo2.lines.savetofile(patheinst + 'name.txt') end; form5.memo1.lines.loadfromfile(patheinst+ 'farbe.txt'); form5.combobox1.caption:=form5.memo1.lines[0]; form5.button2.click; end; |
Diese Prozedur wird immer beim Starten des Programms gestartet (Form1.Create). Leider ergibt sich dann bei mir sofort ein Fehler, weil ich Form5 irgendwie nicht ansprechen kann. Kann es sein, dass die anderen Formulare erst später erstellt werden und deshalb Form5 noch gar nicht existiert? Wie kann ich das Problem beheben?
Vielen Dank
Moderiert von Narses: Code- durch Delphi-Tags ersetzt
galagher - Sa 08.12.18 10:15
Rawi hat folgendes geschrieben : |
Diese Prozedur wird immer beim Starten des Programms gestartet (Form1.Create). |
Das funktioniert deshalb nicht, weil:
Rawi hat folgendes geschrieben : |
[...] die anderen Formulare erst später erstellt werden |
Genau das ist der Grund! Form5 existiert im
Create von Form1 noch nicht.
Rawi hat folgendes geschrieben : |
Wie kann ich das Problem beheben? |
Du musst das, was Form5 mit Memo2 macht, in eine eigene Prozedur auslagern, dabei darfst du weder auf Form5 noch auf eine Komponente von Form5 zugreifen. Schreibe die Prozedur so, dass sie sowohl von Form5 als auch von Form1 genutzt werden kann und gib dort ein
TMemo als Konstante an.
Alternativ kannst du, wenn das in deinem Programm möglich ist, in Prozedur
TForm1.FormShow auf Form5 zugreifen, oder du versuchst es in der
OnActivate-Prozedur von Form1. In beiden Fällen musst du unter Umständen Vorkehrungen treffen, dass der Code nicht bei jedem Eintritt des OnShow- bzw. OnActivate-Ereignisses ausgeführt wird, zB. mit einer Boolean-Variable.
Die sauberste Lösung ist aber eine eigene, separate Prozedur! Ich würde es so machen.