我在 Delphi 10.3.3 的 OnClick 事件中遇到堆栈溢出错误

I got Stack overflow error in an OnClick event in Delphi 10.3.3

好的...我有这个表格,里面有 toggleSwitch,用户必须点击它们,其他什么都不会发生...稍后我会 UPDATE 中的每个查询,但绝对什么都不做,我得到一个堆栈溢出错误。我只是这样做 它必须检查 Switch 是否处于 OFF 模式然后它必须打开它否则...... 请帮我解决这个问题

注意:我有类似的应用程序可以与 ToggleSwitches 一起正常工作,但这个很有趣

procedure TUserAccess_.ToggleSwitch1Click(Sender: TObject);
begin
 if ToggleSwitch1.State = tssOff then
  ToggleSwitch1.State:= tssOn
 else
  ToggleSwitch1.State:= tssOff
end;

这是非常令人期待的。

如果您有一个无条件调用自身的函数,那么理论上您将得到一个无限的函数调用序列。实际上,您会遇到堆栈溢出。

(要对此有一个感觉,请尝试 运行

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1Click(Sender);
end;

或类似的东西。)

在这种情况下,用户单击切换开关。因此,它的 OnClick 处理程序被调用。但是这个改变了拨动开关的状态,这也触发了 OnClick 处理程序,因为这就是控件传达其状态已更改的方式。所以这段代码又是运行,状态又被你的代码改变了,OnClick处理程序又被调用了。以此类推了一段时间。

因此,您会遇到堆栈溢出。 (而且,如果您没有使用过某些理论计算机,那么您将在应用程序的剩余生命周期中进一步深入递归。)

你知道当你点击开关时它会自动切换吗?

因此,根本不需要您的代码。