2012-03-24 57 views
3

我TMemo后代具有构造TMemo后裔由空行

constructor TMyMemo.Create(AOwner: TComponent); 
begin 
    inherited Create(AOwner); 
    Lines.Clear; 
end; 

当我把TMyMemo我得到错误的形式“控制‘’没有父窗口。”为什么?

+2

你为什么要发布在首位行,如果你忽视它的设置。改为从TCustomMemo派生。 – 2012-03-24 08:36:10

+2

@大卫 - 我希望在表单上放置“空白”备忘录。通常/总是我把TMemo放在我清晰的线条上。我很懒惰:) – Branko 2012-03-24 08:50:18

+4

你现在已经有了很好的答案,但这个问题也是你解释你的根本问题的一个很好的例子。 – 2012-03-24 09:25:55

回答

17

新创建的备忘录中没有任何内容。但是只要组件获得名称,内容就会被添加,这个名称由设计者自动完成。为了防止这种情况,从ControlStyle删除csSetCaption

constructor TMyMemo.Create(AOwner: TComponent); 
begin 
    inherited Create(AOwner); 
    ControlStyle := ControlStyle - [csSetCaption]; 
end; 
+0

一如既往 - 解决方案很好的解释。谢谢! – Branko 2012-03-24 09:03:30

+2

很棒的回答。我想我也会创建一个MyPanel和MyEdit。 :)或者它是你可以在设计器中切换的选项吗? – GolezTrol 2012-03-24 09:32:52

0

移动Lines.Clear到覆盖方法CreateWnd方法。基础窗口控制(多行编辑)不存在时创建执行

+4

无论何时调用“CreateWnd”,这都会清除内容,这比您想象的要多。 – NGLN 2012-03-24 08:58:53