我有:
TMyForm = class(TForm)
strict private
FMyColumn: TMyGridColumn;
...
end;
...
constructor TMyForm.Create;
begin
...
FMyColumn := TMyGridColumn;
FMyColumn.Name := 'FMyColumn';
// I wish to substirtute it with a call like this which will return 'FMyColumn'
FMyColumn.Name := GetFieldName(FMyColumn);
...
end;
我需要使用一些有意义的名称初始化组件(TMyGridColumn)名称,但更喜欢不将其名称硬编码为字符串文字。
非RTTI解决方案将更受欢迎。
答案 0 :(得分:2)
对象没有任何先验知识,其中的字段或变量引用它。因此,如果没有更多信息,您就无法编写这样的功能。
如果您的函数知道哪个对象具有对该列的引用,那么它可以使用RTTI来查找其名称。没有RTTI,你不能指望这样做。
我认为您遇到的根本问题是,虽然您将函数命名为GetFieldName,但您没有传递字段。您正在传递对象引用。