主窗体和继承窗体
程序将第一个创建的窗体作为主窗体。如果创建了一个后,在其他窗体尚未创建的时候便释放调,
此时又创建了一个窗体,那么第二次创建的窗体就会变成主窗体了。
关闭主窗体,程序就认为是终止运行,并且调用 Free 释放掉主窗体资源,进而程序结束退出。
而关闭其他非主窗体,程序只是将其隐藏起来了。
子窗体会将主窗体的属性方法继承下来,对于主窗体中手动增加的方法(即声明在访问控制级别
private、protected、published、public 中的方法),除非显示的增加 virtual 关键字,并在子
类中显示的使用 override 关键字,否则不会使用多态的方式来继承(即晚绑定的方式)。而窗体的
元素方法(即那些没有任何控制级别关键字限制的方法,如一个窗体的 FormCreate 方法,或者说窗
体根据用户的操作自动生成的方法),会默认的使用多态的方式来继承。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject); // 子窗体默认会使用多态的的形式继承
private
{ Private declarations }
public
{ Public declarations }
procedure DoSomething; // 除非使用 virtual 和 override 关键字,否则子窗体不
//会以多态的方式继承
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.DoSomething;
begin
// 除非使用 virtual 和 override 关键字,否则子窗体不会以多态的方式继承
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// 子窗体默认会使用多态的的形式继承
end;
end.
另注:在继承自己的窗体时,最好先将其加入工程,然后再使用向导来创建对应子类,否则
会存在一个很“隐晦”,而且不易发现,虽然这个错误在运行时并没有发现有什么影
响,但以防万一。(当用Ctrl+鼠标链接到父类窗体单元,再将其关闭,在鼠标放置
到子类声明处class后括号中的父类时,编译器的提示信息好想就部能够检测到父类
的信息了,于是报错了。还有就是创建的方法在使用ctrl + shift + c等自动创建代码
的情况下,不会自动加入"inherited"关键字,似乎无法实现晚绑定。)