我想稍微简化将表单状态保存到磁盘的过程。我使用我自己的从 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;
我像这样使用我的课程:
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 被执行了!