![]() |
Schon wieder TToggleSwitch
Hallo Leute,
ich habe vier ToggleSwitches tsw1 bis 4 und will, dass nur einer auf [ein] geschaltet werden kann. Ich habe mir Folgendes ausgedacht:
Delphi-Quellcode:
Die anderen Switches werden zwar [aus] geschaltet aber der angeklickte Switch bleibt unverändert. Ich muss erneut klicken. Nur eine Kleinigkeit aber es ist irgendwie unlogisch. Es sieht so aus, als wenn im OnClick-Ereignis etwas ausgeführt wird, das Schalten des ToggleSwitch nicht mehr statt findet.
procedure MultipleChoiceDlg.tsw1Click(Sender: TObject);
var tsNr,i: Integer; begin tsNr:=(Sender as TToggleSwitch).Tag; for i:=1 to 4 do if i <> tsNr then TToggleSwitch(FindComponent('tsw'+IntToStr(i))).State:=tssOff; //TToggleSwitch(FindComponent('tsw'+IntToStr(tsNr))).State:=tssOn; Das funktioniert nicht! end; |
AW: Schon wieder TToggleSwitch
Und was ist wenn der eingeschaltete auf AUS geschaltet wird, sollen dann KEINER auf EIN stehen?
Jedenfalls: Das Problem liegt darin dass der Profi der
Delphi-Quellcode:
verbrochen hat das
TToggleSwitch
Delphi-Quellcode:
-Event auslösen lässt wenn du die
OnClick
Delphi-Quellcode:
-Eigenschaft änderst.
State
Mach ein ShowMessage(..) oder Memo1.Lines.Add(..) oder Debugger-Haltepunkt in deine Routine und du siehst dass die Methode somit mehrmals aufgerufen wird. //// Edit Eine Lösung könnte z.B. sein dass du das OnClick-Event der Switches temporär deaktivierst wenn du den Status umstellst:
Delphi-Quellcode:
type
TToggleSwitchHelper = class helper for TToggleSwitch procedure setToOffWithoutEvent(); end; procedure TForm1.toggleSwitchClick(Sender: TObject); var tsNr, i: Integer; componentName: TComponentName; begin tsNr := (Sender as TToggleSwitch).Tag; for i := 1 to 4 do begin componentName := 'ToggleSwitch' + i.ToString(); if (i <> tsNr) then (FindComponent(componentName) as TToggleSwitch).setToOffWithoutEvent() end end; procedure TToggleSwitchHelper.setToOffWithoutEvent(); var onClickEvent: TNotifyEvent; begin onClickEvent := OnClick; try OnClick := nil; State := TToggleSwitchState.tssOff; finally OnClick := onClickEvent; end; end; |
AW: Schon wieder TToggleSwitch
Liste der Anhänge anzeigen (Anzahl: 1)
Der ToggleSwitch arbeitet eigentlich recht gut mit Actions zusammen. Das anhängende Beispielprojekt zeigt das Prinzip basierend auf deinen Vorgaben.
|
AW: Schon wieder TToggleSwitch
Hallo Günther, so klappt es, danke.
Ich hatte ein kleines Testprogramm geschrieben und schon gesehen, dass das OnClick Event zweimal durchlaufen wird, also beim zweiten Durchlauf wieder abgeschaltet wird. Meine Lösung wären nur die guten alten Radio-Buttons gewesen. Da sehen die ToggleSwitcher doch etwas besser aus. Hallo Uwe, ich bin nur Hobbyprogrammierer, da kann man entspannt sein, besonders mit der Zeitschiene aber ich habe schon den Anspruch ein gutes Programm zu schreiben. Mein Projekt ist ein universelles Abfrageprogramm vom Vokabeln lernen bis zum Quiz mit Multiple Choice. Ein bischen modern soll es auch aussehen. Ich werde mir das Zip genau durchsehen. Gruß Willie. |
AW: Schon wieder TToggleSwitch
Nachtrag:
Es ist verblüffend mit wie wenig Quelltext man auskommt, wenn man es richtig macht. Willie. |
AW: Schon wieder TToggleSwitch
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 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