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

TCheckBox.Data invalid typecast when using as TValue

重现步骤:

-新的 firemonkey-应用程序

-将 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.data 但是,即使它也是 TValue,在调用 AsInteger 时也会抛出 "EInvalidCast"-错误。使用 checkbox1.data.AsType<Integer> 时出现相同的错误。

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

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

之所以看似可以放入 Integer 数据,是因为 TCheckBox.SetData 将忽略无效数据类型并将 Data 设置为 False