CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

VCL控件的创建问题

楼主xhuagen(蜗牛爬坡)2005-04-02 19:42:56 在 Delphi / VCL组件开发及应用 提问

定义类TForm1,   TForm1中有控件Button1.  
  那么在调TForm1.Create(self)创建Form1时,TForm1中的Button1是怎么创建的呢?  
   
  我只知道因TForm1从TForm继承来的,而TForm是从TCustomForm继承来的,实际调用的是TCustomForm.Create,   而TCustomForm.Create主要是调用   TCustomForm.CreateNew,   看完之后(没有怎么看懂),还是不知道Button1是在什么位置创建的,请教各位了,谢谢.  
   
  type  
      TForm1   =   class(TForm)  
          Button1:   TButton;  
          ...  
   
      end;  
   
  Var  
      Form1:   TForm1;  
   
  implementation  
  ...  
   
      Form1   :=   TForm1.Create(self);  
   
  ... 问题点数:50、回复次数:9Top

1 楼xhuagen(蜗牛爬坡)回复于 2005-04-02 21:03:23 得分 0

那位帮帮忙啊,才学delphi,对它某些机制不是很清楚.谢谢了!Top

2 楼alexanda2000(书生活)回复于 2005-04-02 22:04:28 得分 5

帮你顶Top

3 楼CareYouOnly(只在乎你)回复于 2005-04-03 01:43:22 得分 10

VCL内部做了工作,当你Create窗体时,窗体会将窗体上的组件Create(窗体里面有那些组件,Delphi将他们保存在“窗体所在的单元名.dfm”里,窗体被创建的时候它会自动读取这个文件然后创建窗体上的组件),不用你操心。Top

4 楼ehom(?!)回复于 2005-04-03 02:09:20 得分 15

重点看TReader和TWriter这两个class相关的代码  
   
  包括各级class对其实例的调用。Top

5 楼xhuagen(蜗牛爬坡)回复于 2005-04-03 08:58:41 得分 0

现谢谢楼上几位大哥指点.  
  我还有一点不明白,代码如下,我第一次按button1时,会创建并显示Form2,但是再按Button1时,程序就没有反应了.   Form2.Free后Form2不是重新变为nil了吗?   疑惑啊!   谢谢各位了.  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
      if   Form2   =   nil   then  
      begin  
          Form2   :=   TForm2.Create(self);  
          Form2.ShowModal;  
          Form2.Free;  
      end  
  end;Top

6 楼e5022(helpid)回复于 2005-04-03 09:13:03 得分 5

Form2.ShowModal;  
  是显示模式化对话框,这样的对话框一旦出现,你不关闭它的话,程序其他部分就不会接到任何事件。显示这种模式的窗体常常是出于很高级别的错误,或者是不得不输入的数据。平时推荐不要用。  
  据个例子,平时大多数程序的文件打开和关闭对话框就是模式窗体。一旦打开就无法操作其他的东西了。另外,相对于模式,还有一种叫“非模式”就是很多平常的窗口了,一个非模式窗口的打开并不影响其他窗口接受事件。打开方式就是Form2.Show;  
  另外,你的程序中再执行了Form2.ShowModal;之后就进入了一种线程阻塞状态,程序就停在了Form2.ShowModal那句话上面了,直到对From2的操作结束位置。  
  平时编程的时候也可以理解,在同一段程序中,一个函数未执行完成时是不会直接执行下一条语句的。  
  Top

7 楼xhuagen(蜗牛爬坡)回复于 2005-04-03 09:20:20 得分 0

谢谢e5022(helpid)   (   ),我的意思是,在Form2关闭后,我再点击Form1.Button1,但是程序没有响应,是不是Form2不是nil啊,那Form2是什么呢?Top

8 楼ehom(?!)回复于 2005-04-03 10:28:22 得分 10

Form2的值还是以前的值,Form2.Free只是释放对象,不改变Form2的值Top

9 楼CareYouOnly(只在乎你)回复于 2005-04-03 16:40:40 得分 5

Form2其实是一个指针,Form2.free后Form2这个指针依然指向原来那个Form2对象(尽管这个对象已经被释放了),最好在Form2.free之后执行Form2:=nil或者直接调用FreeAndNil(Form2)来释放Form2Top

相关问题

  • 如何删除我创建的VCL控件
  • 动态创建的VCL控件如何改变属性?
  • 有关BCB中派生VCL类及动态地创建控件的问题
  • 关于控件VCL
  • Rich Edit 控件的创建
  • 动态创建控件
  • evb中创建控件
  • 关于创建控件……
  • 动态创建控件?
  • 创建新的控件类

关键词

  • 组件
  • 模式
  • 执行
  • 窗体
  • form2
  • tform
  • 创建
  • tcustomform
  • showmodal
  • 调用

得分解答快速导航

  • 帖主:xhuagen
  • alexanda2000
  • CareYouOnly
  • ehom
  • e5022
  • ehom
  • CareYouOnly

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo