2017-04-17 108 views
-2

我们可以扩展任何类,所以:从另一个单元扩展类

TColumn = class(FMX.Grid.TColumn) 
private 
    FId: Integer; 
public 
    property Id: Integer read FId write FId; 
end; 

而且这是工作在我们自己的单位不错,但是如果我们试试这个(Grid: TGrid表格上):

procedure ChangeId; 
var 
    Col: TColumn; 
begin 
    Col := Grid.Columns[0]; 
    Col.Id := 0; 
end; 

我们得到了错误:

[dcc32 Error] uHelpers.pas(136): E2010 Incompatible types:
'uHelpers.TColumn' and 'FMX.Grid.TColumn'

任何方式扩大FMX.Grid.TColumn类,使程序ChangeId是否正确?

+0

你的问题是作用域之一。为什么在已经有FMX.Grid.TColumn的情况下调用你的类TColumn?你期望编译器能够区分它吗?叫你类TMyColumn。现在Grid在什么时候获得了TMyColumns的集合?它从来没有。这是一个完全不同的问题! – nolaspeaker

+0

我明白这个问题和我关于这个问题的问题。这完全不可能? –

+1

这是可能的。只是以不同的方式做。 [添加一个TCombobox列到Firemonkey TGrid](http://stackoverflow.com/questions/32920219) – nolaspeaker

回答

-1

这是可能的,但我们应该手动在运行时添加列:

TIdColumn = class(FMX.Grid.TColumn) 
private 
    FId: Integer; 
public 
    property Id: Integer read FId write FId; 
end; 

Grid.AddObject(TIdColumn.Create(Grid)); 

procedure ChangeId; 
var 
    Col: TIdColumn; 
begin 
    Col := Grid.Columns[0] as TIdColumn; 
    Col.Id := 0; 
end;