德尔福:钩子切换开关手动状态更改以避免单击调用



德尔福里约热内卢 10.3.2

使用 TToggleSwitch 组件,当您手动更改 State 属性时,即

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;
    
  • 使用访问器类访问受保护的FClicksDisabled成员,以便在更改State时可以暂时将其设置为 True:

    type
    TToggleSwitchAccess = class(TToggleSwitch)
    end;
    TToggleSwitchAccess(ToggleSwitch1).FClicksDisabled := True;
    try
    ToggleSwitch1.State := ...;
    finally
    TToggleSwitchAccess(ToggleSwitch1).FClicksDisabled := False;
    end;
    

最新更新