TEdit和TComboBox都是从TControl下继承下来的,如何判断2个类他们具有相同的祖先比如如何判断TEdit和TComboBox都有一个相同的祖先 TControl。2个不同的派生类是否具有相同的父类。父类是什么。

解决方案 »

  1.   

    不知道LZ要往上走几步,因为所有的类都是从TObject派生来的,所有的类都有相同的祖先,下面是段显示派生路径的代码,怎么判断两个类是否有同样的祖先,LZ自己想办法吧var
      vClass: TClass;
    begin
      vClass := TEdit;
      while vClass <> TObject do
      begin
        vClass := vClass.ClassParent;
        ShowMessage(vClass.ClassName);
      end;
    end;
      

  2.   

    按楼上的思想写了一个
    function GetParent(Class1, Class2: TClass): TClass;
    var
      TmpClass: TClass;
    begin
      if Class1.InheritsFrom(Class2) then
      begin
        Result := Class2;
        Exit;
      end;
      if Class2.InheritsFrom(Class1) then
      begin
        Result := Class1;
        Exit;
      end;
      TmpClass := GetParent(Class1, Class2.ClassParent);
      Result := GetParent(Class1.ClassParent, Class2);
      if TmpClass.InheritsFrom(Result) then Result := TmpClass;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Text := GetParent(TButton, TEdit).ClassName;
    end;