窗体1
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;type
  Tmyform = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  myform: Tmyform;implementation{$R *.dfm}procedure Tmyform.FormCreate(Sender: TObject);
begin
  Self.caption:='123';
end;end.窗体2
unit Unit2;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,Unit1;type
  TForm2 = class(Tmyform)
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form2: TForm2;implementation{$R *.dfm}end.
程序很简单
procedure Tmyform.FormCreate(Sender: TObject);
begin
  Self.caption:='123';
end;是窗体1的初始化事件
为什么窗体2也运行了初始化事件呢?
也就是我运行程序的时候窗体2的caption属性也成了'123'那个应该是窗体1的初始化事件啊  这个我想不明白啊

解决方案 »

  1.   

    Self.caption:='123';
    因为你继承的是基类窗体,所以子类窗体创建后,Self指向的是子类窗体
      

  2.   

    那是必然的
    因为你的form2的基类是myformTForm2 = class(Tmyform)所以当Form2创建的时候,首先创建他的基类,就是myform的oncreate事件就执行了,form2当然也就变了
      

  3.   

    我就是想问为什么form2会运行了form1的初始化事件  就因为form2的基类是myform?
    那myform在弄几个其他的事件 比如说单击 双击   那么form2在单击双击的时候也会跟着执行?
      

  4.   

    form2的任何单击事件,如果form2没有添加事件处理代码,系统就检查父类有无相关事件处理代码,有则执行;相关如FORM2已经有事件处理代码,如果不用INHERITED ,是不会调用父类的事件处理代码的;
      

  5.   

    Self.caption:='123';
    因为你继承的是基类窗体,所以子类窗体创建后,Self指向的是子类窗体。这个是必然的。
      

  6.   

    关键是这句
    TForm2 = class(Tmyform)