创建新窗口的几种方式比较

alpsgem 2006-05-18 11:26:54
今天在创建新窗口时发现了个问题,
当我用如下代码创建一个PagesDlg时没有任何问题
procedure TForm1.N1Click(Sender: TObject);
begin
TPagesDlg1.Create(self);
PagesDlg1.Show;
end;

当我再用如下代码创建AboutBox时,系统报错:"A component named Panel1 already exists"
procedure TForm1.A1Click(Sender: TObject);
begin
AboutBox.Create(self);
AboutBox.Show;
end;

但是如果使用
procedure TForm1.A1Click(Sender: TObject);
begin
AboutBox.Show;
end;
或者
procedure TForm1.A1Click(Sender: TObject);
begin
AboutBox:=TAboutBox.Create(Application);
AboutBox.ShowModal;
end;
则不会报错,这是为什么,创建新窗口的方式到底有哪些呢,请各位大虾指教,
谢谢!
...全文
118 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
alpsgem 2006-05-18
  • 打赏
  • 举报
回复
再多问一句
AboutBox:=TAboutBox.Create(Application);
这个Application是什么意思呢?和self到底不同在哪里

AboutBox.ShowModal;和AboutBox.Show;的区别在于何处呢?
(看不懂delphi关于这一段描述的源代码,麻烦大虾再讲讲)
谢谢
woaichenyu 2006-05-18
  • 打赏
  • 举报
回复
楼上正解
GARNETT2183 2006-05-18
  • 打赏
  • 举报
回复
构造函数Create虽然是一个procedure ,但是会返回一个隐式的指针,所以创建对象的方法是这样:
AboutBox := TAboutBox.Create(Self);
alpsgem 2006-05-18
  • 打赏
  • 举报
回复
哦明白了,多谢楼上大虾指点。
GARNETT2183 2006-05-18
  • 打赏
  • 举报
回复
Application是指当前整个工程,Self指的是当前类的这个窗体
Create()后面这个参数说明这个组件属谁,这样做的好外在于你自己不手动释放你这个组件,DELPHI会自己帮你释放, 如果为NIL,就要人工释放了..

ShowModel 和 Show的区别在于,如果窗体为ShowModel显示的,就必须等这个窗体关闭才能对这个程序其它部分进行操作,而这通常用于对话框,而show就是把窗体显示出来...

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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