现有Form1为父窗体,上有Tbutton1,其TButton1的onclick事件中,有个showmessage('1')。还有个Form2是继承于From1的。当运行时,点击Form2上的TButton1的话,并没有执行showmessage('1');但如果Form2上的tButton1添加了onclick事件,就算不写任何代码的话,运行时,会执行父窗体中的button1的onclick事件。这是怎么回事?

解决方案 »

  1.   

    Form2上tButton1的OnClick事件并没有赋值,当然不会响应了
    就给我们要在Button上双击一下,产生OnClick的事件后
    才会在占击的时候响应里面的代码
    这个时候Button.OnClick := ButtonCLick;这个是事件,必须赋值后才能被触发,而不是普通的函数
      

  2.   

    不增加onclick事件也会呀,你是怎么创建第2个窗体的?
      

  3.   

    如果第二个窗体中的button是继承自主窗体的话,默认就会执行父类窗体的button过程,除非你在子窗体的该button事件中写了代码,并且去掉了inherited这句
      

  4.   

    如果form2继承了form1,不需要增加onclick事件也会运行showmeesage('1')的如果增加了onclick事件,一定会有一句inherited;,不会不会运行showmeesage('1')
      

  5.   

    inherited
    先执行父类的过程.再执行自己的过程
    例子:
    B是继承A而来
    而A里面有个过程hello
    procedure A.hello;
    begin
     showmessage('hello');
    end;当你重写B里面的hello过程时
    procedure B.hello;
    begin
     inherited //如果有这句..那么就会先弹出hello,再弹出world;
    showmessage('world');
     //inherited //如果放在这里..那么就先弹出world,hello;
     //如果没有inherited ..那么直接弹出world
    end;