关于动态创建控件的问题

melice 2002-09-24 02:42:17
下面这两段代码,都可以正常的创建出一个panel,问题是
1,代码段二在该窗体销毁的时候会出现指针非法错误。
2,两个代码段里面对panel的color设置都没有效果,为什么?

代码段一
....
with (TPanel.create(self)) do
begin
....
Parent := Form1;
Font.color := clRed; //这里的font有问题,不会起作用。
end;

代码段二
P := TPanel.create(self);
with P do
begin
....
Parent := Form1;
Font.color := clRed; //这里的font还是有问题,不会起作用。
end;


...全文
35 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mengxianbao1521 2002-09-24
  • 打赏
  • 举报
回复
才明白!
noall 2002-09-24
  • 打赏
  • 举报
回复
》》》如果你在窗体销毁的时候自己写了p.free,或者p.destroy,应该会出现指针错误,应为如果你给控件指定了Owner,在Owner销毁时会自动销毁其从属的所有控件。

如果所创建的owner不是窗体,而是窗体内另一个panel,那么在窗体关闭时会将动态创建的控件也destroy吗?
findcsdn 2002-09-24
  • 打赏
  • 举报
回复
宗上所述:
1. 如果创建时使用create(self),则窗体销毁时panel会自动销毁,如果要自 己销毁的话,用create(nil);

2. panel.color就可以了。

沧-海-桑-田 2002-09-24
  • 打赏
  • 举报
回复
错误不在此处
1nbud 2002-09-24
  • 打赏
  • 举报
回复
如果你在窗体销毁的时候自己写了p.free,或者p.destroy,应该会出现指针错误,应为如果你给控件指定了Owner,在Owner销毁时会自动销毁其从属的所有控件。
hongqi162 2002-09-24
  • 打赏
  • 举报
回复
正确!
xxyzjf 2002-09-24
  • 打赏
  • 举报
回复
你的代码没有错!
procedure TForm1.Button1Click(Sender: TObject);
begin
with (TPanel.Create(self)) do
begin
parent:=form1;
left:=50;
width:=100;
height:=200;
color:=clred;
caption:='font color!';
font.Color:=clblue;
end; // with
end;
cgh1970 2002-09-24
  • 打赏
  • 举报
回复
up
ScoutKing 2002-09-24
  • 打赏
  • 举报
回复
1.
代码段二这种用法本身应该没有问题
错误处在别的地方

2.
Font.color是对字体的颜色进行设置
如果要对panel的颜色进行设置
用:Panel.Color

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧