![]() |
Android: Switch vom vorherigen Formular zurücksetzen
Hallo,
ich bin am Verzweifeln und hoffe auf Euren Tipp. Und zwar habe zwei nur Firemonkey Formulare. Form1 hat z.B. nur mehrere TSwitch-Komponenten, die bei Aktivierung ein neues Fenster Form2 öffnen. Wenn in Form2 ein Zurück-Button betätigt wird, soll vor dem Schließen die gewählte TSwitch-Komponente wieder zurückgesetzt werden. (.isChecked := false); Also merke ich mir die Komponente in der Variable
Delphi-Quellcode:
, um diese dann in der Prozedur
RememberSwitch
Delphi-Quellcode:
ansprechen zu können.
ResetSelectedSwitch()
Delphi-Quellcode:
type
public { Public-Deklarationen } procedure ResetSelectedSwitch; end; // Formular 1 procedure TForm1.Switch1Switch(Sender: TObject); var Dlg: TForm2; begin RememberSwitch := TSwitch(Sender); showmessage(RememberSwitch.Name); // der entsprechende Name der Komponente wird korrekt angezeigt if TSwitch(Sender).isChecked then begin Dlg := TForm2.Create(Self); Dlg.Show; end end; Und hier ist der Aufruf aus Form2.
Delphi-Quellcode:
// Formular 2
procedure TForm2.btnCancelClick(Sender: TObject); begin Form1.ResetSelectedSwitch; Close; end; Und hier entsteht bei der Ausgabe des Namens der gemerkten TSwitch-Komponente eine Zugriffsverletzung.
Delphi-Quellcode:
procedure TForm1.ResetSelectedSwitch;
begin showmessage(RememberSwitch.Name); // <---- Zugriffsverletzung TSwitch(RememberSwitch).IsChecked := false; end; Ich habe es auch schon vorher über FindComponent() probiert, aber auch hier kam eine Zugriffsverletzung. Ich freue mich über jedweden Hinweis. Danke. Amigage |
AW: Android: Switch vom vorherigen Formular zurücksetzen
Sicher das die Exception da kommt und nicht beim Cancel?
|
AW: Android: Switch vom vorherigen Formular zurücksetzen
Ja, sicher. Denn das funktioniert:
Delphi-Quellcode:
procedure TForm1.ResetSelectedSwitch;
begin showmessage('hier'); end; |
AW: Android: Switch vom vorherigen Formular zurücksetzen
ja aber dlg ist "out auf scope"
ARC! Wo ist die Variable definiert? |
AW: Android: Switch vom vorherigen Formular zurücksetzen
und wie sieht es damit aus
Delphi-Quellcode:
Jetzt brauchst du die Form nur noch chliessen und alles wird gut
// Formular 1
procedure TForm1.Switch1Switch(Sender: TObject); var Dlg: TForm2; Switch : TSwitch absolute Sender; begin showmessage(Switch.Name); // kann dann irgendwann raus ;o) if Switch.isChecked then begin Dlg := TForm2.Create(Self); Dlg.ShowModal( procedure ( ModalResult : TModalResult ) begin Switch.IsChecked := False; end ); end end; |
AW: Android: Switch vom vorherigen Formular zurücksetzen
@Sir Rufo: Besten Dank, das war's. Damit muss ich mir auch nicht mehr die gewählte Komponente merken, sondern nur das ModalResult auswerten...
Neu für mich war auch:
Delphi-Quellcode:
Lese ich das richtig, dass bei der Definition immer davon ausgegangen werden kann, dass es sich um TSwitch handelt? Bisher habe ich TSwitch(Sender) verwendet...
Switch : TSwitch absolute Sender;
Beste Dank. Amigage |
AW: Android: Switch vom vorherigen Formular zurücksetzen
Zitat:
Delphi-Quellcode:
davon ausgehen kannst, denn hier handelt es sich um einem harten Cast.
TSwitch(Sender)
Wenn man aber eh einen harten Cast vornimmt, dann kann man das auch gleich so deklarieren und spart sich das ständige casten ... was einfach nur viel Schreibarbeit ist. Wenn du es sicher haben möchtest, dann so
Delphi-Quellcode:
procedure TForm1.Switch1Switch(Sender: TObject);
var Dlg: TForm2; Switch : TSwitch absolute Sender; begin // Wir prüfen, ob der Sender auch wirklich vom Typ TSwitch ist if not ( Sender is TSwitch ) then Exit; // ist nicht, dann z.B. raus hier showmessage(Switch.Name); // kann dann irgendwann raus ;o) if Switch.isChecked then begin Dlg := TForm2.Create(Self); Dlg.ShowModal( procedure ( ModalResult : TModalResult ) begin Switch.IsChecked := False; end ); end end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz