TCheckBox.Data用作TValue时无效的类型转换

时间:2015-06-01 07:56:50

标签: delphi firemonkey rtti tvalue

重现的步骤:

-new firemonkey-application

-add TCheckBox to form

现在使用以下代码创建一个方法:

procedure TForm1.Foo;
var a,b:Integer; lVal:TValue;
begin
  lVal:=TValue.From<Integer>(42);
  a:=lVal.AsInteger;
  checkbox1.Data:=TValue.From<Integer>(42);
  b:=checkbox1.Data.AsInteger;
end;   

使用lVal的强制转换运行没有问题,checkbox1.data,即使它也是一个TValue,在调用AsInteger时抛出“EInvalidCast”-Error。使用checkbox1.data.AsType<Integer>时会出现相同的错误。

我在这里滥用TCheckBox.Data还是某种错误?

1 个答案:

答案 0 :(得分:3)

TCheckBox.Data包含boolean值,特别是复选框已选中状态。这就是当您尝试从中读取EInvalidCast时出现Integer错误的原因。

您似乎可以放入Integer数据的原因是因为TCheckBox.SetData会忽略无效的数据类型并将Data设置为False