2

重现步骤:

-新的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. 改为使用时会出现相同的错误checkbox1.data.AsType<Integer>

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

4

1 回答 1

3

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

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

于 2015-06-01T08:07:20.600 回答