我有一个复选框控件,带有标记的编辑作为已发布的子组件.
我要做的是为复选框创建一个Translate过程,该过程将在顶部显示标记的编辑,并允许用户更改复选框标题的文本.像这样的东西:
constructor TPBxCheckBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FTranslateEdit := TLabeledEdit.Create(Self);
FTranslateEdit.Parent := Self.Parent;
FTranslateEdit.SetSubComponent(True);
FTranslateEdit.Visible := False;
end;
procedure TPBxCheckBox.Translate(Show: Boolean);
begin
TranslateEdit.Left := Self.Left;
TranslateEdit.Top := Self.Top;
TranslateEdit.EditLabel.Caption := Self.Caption;
TranslateEdit.Text := Self.Caption;
TranslateEdit.Visible := Show;
TranslateEdit.Width := Self.Width;
end;
Run Code Online (Sandbox Code Playgroud)
但这不起作用 - 标签编辑从未显示过.
我在这做错了什么?
它不显示因为TPBxCheckBox.Create()
时间Parent
还没有分配,所以你基本上做的TranslateEdit.Parent := nil;
.
如果您确实希望TranslatedEdit与TPBxCheckBox本身具有相同的父级,则可以SetParet
在TPBxCheckBox的Parent分配时覆盖并执行操作.像这样的东西:
TPBxCheckBox = class(TWhatever)
protected
procedure SetParent(AParent: TWinControl); override;
end;
procedure TPBxCheckBox.SetParent(AParent: TWinControl);
begin
inherited;
TranslatedEdit.Parent := AParent;
end;
Run Code Online (Sandbox Code Playgroud)