复制步骤:
- firemonkey-application
-添加TCheckBox到表单
现在用下面的代码创建一个方法:
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。然而,即使它是一个TValue,抛出一个"EInvalidCast"-错误,当调用AsInteger
。当使用checkbox1.data.AsType<Integer>
时也会出现相同的错误。
我在这里滥用TCheckBox.Data
还是这是某种bug?
TCheckBox.Data
包含boolean
值,具体为复选框勾选状态。这就是为什么当你试图从它读取Integer
时,你会得到EInvalidCast
错误。
看起来可以把Integer
数据放进去的原因是因为TCheckBox.SetData
会忽略无效的数据类型,并将Data
设置为False
。