有没有办法跳过从 dfm 创建的组件?
我有一个有时不想创建的可视化组件。当然,我可以手动创建组件,但是由于组件有很多项目,这将需要大量工作。
最佳答案
实际上有一种方法可以做到这一点。这是一个跳过特定类的组件的示例。
向您的表单添加两个类似以下的事件处理程序:
procedure TForm224.DoCreateComponent(Reader: TReader; ComponentClass: TComponentClass; var Component: TComponent);
begin
if ComponentClass = <whatever component class shall be skipped> then begin
Abort;
end;
end;
procedure TForm224.DoReaderError(Reader: TReader; const Message: string; var Handled: Boolean);
begin
Handled := True;
end;
然后以这种方式覆盖表单的 ReadState()
方法:
procedure TForm224.ReadState(Reader: TReader);
begin
Reader.OnError := DoReaderError;
Reader.OnCreateComponent := DoCreateComponent;
inherited;
Reader.OnError := nil;
Reader.OnCreateComponent := nil;
end;
如果该组件类有多个实例,而您需要检查单个实例,则可以使用 TReader.OnSetName
事件:
procedure TForm224.ReadState(Reader: TReader);
begin
...
Reader.OnSetName := DoSetName;
inherited;
Reader.OnSetName := nil;
...
end;
procedure TForm224.DoSetName(Reader: TReader; Component: TComponent; var Name: string);
begin
if Name = <instance name> then begin
Abort;
end;
end;
关于delphi - 手动跳过从 dfm 创建的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47347578/