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;
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 访问受保护的
时临时将其设置为 TrueFClicksDisabled
成员,这样您可以在更改State
:type TToggleSwitchAccess = class(TToggleSwitch) end; TToggleSwitchAccess(ToggleSwitch1).FClicksDisabled := True; try ToggleSwitch1.State := ...; finally TToggleSwitchAccess(ToggleSwitch1).FClicksDisabled := False; end;