gpt4 book ai didi

delphi - TAction.OnExecute 未执行

转载 作者:行者123 更新时间:2023-12-03 18:25:53 27 4
gpt4 key购买 nike

我想稍微简化将表单状态保存到磁盘的过程。我使用我自己的从 TIniFile 派生的 INI 文件类来读取表单中“所有”控件的状态。像这样的东西:

procedure TMyIniFile.Read(Comp: TComponent);
begin
if ValueExists(Section, Comp.Name) then
begin
if Comp.InheritsFrom(TAction)
then TAction(Comp).Checked:= ReadBool(Section, Comp.Name, FALSE)
else
if Comp.InheritsFrom(TCheckBox) etc
end;
end;

我像这样使用我的类(class):
TYPE
TformTester = class(TForm)
MyAction: TAction;
procedure actMyActionExecute(Sender: TObject);

...

procedure TformTester.FormDestroy(Sender: TObject);
VAR
MyIniFile: TMyIniFile;
begin
MyAction.Checked:= true;
MyIniFile:= TMyIniFile.Create('Main Form');
MyIniFile.write(MyAction); // <------ This saves the 'Checked' property of MyAction.
...
end;

我验证了 INI 文件并根据关闭时的属性状态正确保存了状态(真/假)。
procedure TformTester.FormStartUp;
VAR MyIniFile: TMyIniFile;
begin
MyIniFile:= TMyIniFile.Create('Main Form');
MyIniFile.read(MyAction); // <------ This reads the 'Checked' property of MyAction. It should execute the actMyActionExecute but it doesn't.
assert(MyAction.Checked); // <---- Yes, it is checked
...
end;


procedure TformTester.MyActionExecute(Sender: TObject);
begin
if MyAction.Checked
then Caption:= 'Action checked'
else Caption:= 'Action is un-checked!';
end;

问题:为什么执行 MyIniFile.read(MyAction) 时不调用 actMyActionExecute?

PS:MyIniFile.read(MyCheckbox) 工作,如果而不是 TAction 我传递任何其他东西,例如一个复选框。我的意思是 MyCheckbox.OnClick 被执行了!

最佳答案

行动 OnExecute调用链接控件时触发。例如,按下按钮或选择菜单项。或者,如果您明确调用 Execute,则会触发它。事件上。
OnExecute修改任何属性时都不会触发事件。这是设计使然,非常合理。当用户执行某些操作时会触发此事件。不是在程序员设置 Action 时。

关于delphi - TAction.OnExecute 未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46253875/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com