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
TToggleSwitch
verbrochen hat das
OnClick
-Event auslösen lässt wenn du die
State
-Eigenschaft änderst.
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;