我建了个FormA,上面放了个ComboBox,又建了个FormB,是从FormA继承而来的,建好FormB后,发现FormA的ComboBox的onchange事件未写处理函数,把函数补上后,FormB的combobox的onchange事件却什么也没做。请教各位,这是为什么?

解决方案 »

  1.   

    var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var form2:TForm1;
    begin
        form2:=TForm1.Create(self);
        form2.Width:=self.Width div 2;
        form2.Height:=self.Height div 2;
        form2.Show;
    end;procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
        showmessage('Oh!Yeah!');
    end;end.
    /////////////////////////////////
    测试通过,木有问题!!!
      

  2.   

    procedure TForm2.ComboBox1Change(Sender: TObject);
    begin
      inherited;//你是不是把这句屏蔽掉了。end;
      

  3.   

    楼主照你这么说,FormB所有的事件都应该和FormA相同了?我晕...
      

  4.   

    回复人: dongycumt(阡陌) ( ) 信誉:100  2005-06-10 17:18:00  得分: 0  
     
     
       楼主照你这么说,FormB所有的事件都应该和FormA相同了?我晕...
      
     
    我也晕,你可以试试不过不明白楼主怎么会有问题,这个……基本上都不用写代码就可以试验出来的说
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        ComboBox1: TComboBox;
        procedure ComboBox1Change(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
    showmessage('111111');
    end;end.
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,Unit1;type
      TForm2 = class(TForm1)
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementation{$R *.dfm}end.把form2设成主窗体运行一下看看,咋会有问题?
      

  5.   

    我是在FormB已经写好之后再在FormA里增加了ComboBox的onchange事件处理,FormB未再做改动,在FormB中没有另外对ComboBox的onchange事件做处理,只是要用FormA的ComboBox的onchange事件处理。重编译后在FormB中ComboBox的onchange事件没有自动继承FormA后来增加的ComboBox的onchange事件处理函数。
      

  6.   

    chijingde(AD)的说法更是不敢苟同我感觉可能是这样的原因,楼主的FormB在继承FormA时,只继承了窗体本身的属性而没有继承窗体这个容器里的东西。
      

  7.   

    如果你想继承Form1的onchange时间,必须这样写
    procedure TForm2.ComboBox1Change(Sender: TObject);
    begin
    inherited;//这一句的意思是完成form1的combobox1change的操作
    //你的对form2的combobox1change事件增加了新的操作end;
      

  8.   

    对FormB的onchange事件不要再增加其他的处理了,直接用FormA的.因此, Mrkang(谁比我菜我不愿意) 所建议的用不上.