1

我在将字符串变量转换为TObject.

我有一个向我返回两列的查询。在第一列中varchar,我有转换为字符串的值,在第二列中,我有int值。

我想用这些值以这种方式填充 ComboBox:

cbx1-> AddItem (DataSet1->DataSet->Fields->Field[0]->AsString, (TObject *) (int) DataSet1->DataSet->Fields->Field[1];

当我提到第二个 int 类型的值时,我收到了一些灌木丛,例如 xD 等。

通过尝试将此值转换为字符串,例如:

String temp = IntToStr (DataSet1->DataSet->Fields->Field[1]);
cbx1-> AddItem (DataSet1->DataSet->Fields->Field[0]->AsString, (TObject *) temp;

我收到一条错误消息:

无法从“AnsiString”转换为“TObject”

我不知道我还能做些什么来转换这个值。

4

1 回答 1

1

您不能将AnsiString 值强制转换为TObject*指针。您只能将整数值或指针值强制转换为TObject*指针。 AnsiString两者都不是。

无论如何,您都没有正确地从第二个字段 中检索int 值。Field[1]是指向集合中实际TField对象的指针。Fields该指针是您要存储在 ComboBox 中的内容,而不是它所代表的int TField

您需要调用Fields[1]->AsInteger以获取int第二个字段的值,类似于您用于Fields[0]->AsString获取第一个字段的字符串值的方式:

cbx1->AddItem(
    DataSet1->DataSet->Fields->Field[0]->AsString,
    (TObject*) DataSet1->DataSet->Fields->Field[1]->AsInteger
    // in C++, using reinterpret_cast is preferred over C-style casting:
    // reinterpret_cast<TObject*>(DataSet1->DataSet->Fields->Field[1]->AsInteger)
);

这与您上一个问题中的代码没有什么不同:

cbx1->AddItem("one",(TObject*)1);

您现在只是放置文字"one"1等效类型的运行时变量。

于 2018-07-03T21:14:26.780 回答