Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Schon wieder TToggleSwitch

  Alt 20. Dez 2018, 17:29
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;

Geändert von Der schöne Günther (20. Dez 2018 um 17:44 Uhr)
  Mit Zitat antworten Zitat