1

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

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

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

1 回答 1

3

这是非常值得期待的。

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

(要对此有所了解,请尝试运行

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

或类似的东西。)

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

因此,您会遇到堆栈溢出。(如果您没有使用某种理论计算机,那么您将在应用程序的余生中进一步向下递归。)

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

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

于 2020-07-23T21:47:40.003 回答