重现的步骤:
-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
还是某种错误?
答案 0 :(得分:3)
TCheckBox.Data
包含boolean
值,特别是复选框已选中状态。这就是当您尝试从中读取EInvalidCast
时出现Integer
错误的原因。
您似乎可以放入Integer
数据的原因是因为TCheckBox.SetData
会忽略无效的数据类型并将Data
设置为False
。