Delphi: 挂钩 ToggleSwitch 手动状态更改以避免 Click 调用

Delphi: hook ToggleSwitch manual State change to avoid a Click call

Delphi 里约 10.3.2

使用 TToggleSwitch 组件,当您手动更改状态 属性,即

ToggleSwitch1.State := tssOff 

调用了 OnClick 事件。我怎样才能避免这种情况?

您有几个选择:

  • 在设置 State 之前将 OnClick 属性 设置为 nil,然后在之后恢复事件处理程序。

    ToggleSwitch1.OnClick := nil;
    try
      ToggleSwitch1.State := ...;
    finally
      ToggleSwitch1.OnClick := ToggleSwitch1Click;
    end;
    
  • 在设置 State 之前设置一个标志,然后清除标志,并让 OnClick 事件处理程序在执行任何操作之前检查标志。

    ToggleSwitch1.Tag := 1;
    try
      ToggleSwitch1.State := ...;
    finally
      ToggleSwitch1.Tag := 0;
    end;
    
    procedure TMyForm.ToggleSwitch1Click(Sender: TObject);
    begin
      if ToggleSwitch1.Tag <> 0 then Exit;
      ...
    end;
    
  • 使用访问器 class 访问受保护的 FClicksDisabled 成员,这样您可以在更改 State:

    时临时将其设置为 True
    type
      TToggleSwitchAccess = class(TToggleSwitch)
      end;
    
    TToggleSwitchAccess(ToggleSwitch1).FClicksDisabled := True;
    try
      ToggleSwitch1.State := ...;
    finally
      TToggleSwitchAccess(ToggleSwitch1).FClicksDisabled := False;
    end;