【问题标题】:Extending class from another unit从另一个单元扩展课程
【发布时间】:2017-04-17 07:16:27
【问题描述】:

我们可以扩展任何类:

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 错误] uHelpers.pas(136): E2010 不兼容的类型:
'uHelpers.TColumn' 和 'FMX.Grid.TColumn'

有什么方法可以扩展FMX.Grid.TColumn 类以使过程ChangeId 正确吗?

【问题讨论】:

  • 您的问题是范围界定问题之一。既然已经有 FMX.Grid.TColumn,为什么还要调用你的类 TColumn?你期望编译器能分辨出来吗?称你为 TMyColumn 类。现在 Grid 在什么时候获得了 TMyColumns 的集合?它从来没有。这是一个完全不同的问题!
  • 我了解这个问题以及我对这个问题的疑问。这完全不可能?
  • 有可能。只是以不同的方式来做。 Add a TCombobox Column to a Firemonkey TGrid
  • 不,您的问题不是范围界定问题。您的问题是网格不会创建列类的实例。
  • @DavidHeffernan 是对的。列对象是网格中的FMX.Grid.TColumn 实例。您不能将它们分配给您的 TColumn 类型并使用其 id 属性,因为它不存在。

标签: delphi helper class-helpers


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 2017-01-12
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多