我在将字符串变量转换为TObject
时遇到问题。
我有一个查询,它向我返回两列。在第一列中,我有varchar
转换为字符串的值,在第二列中,我有int
值。
我想用这些值以这种方式填充组合框:
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">
我不知道我还能做些什么来转换这个值。
不能将AnsiString
值强制转换为TObject*
指针。 只能将整数值或指针值强制转换为TObject*
指针。AnsiString
都不是。
无论如何,您都没有从第二个字段中正确检索int
值。Field[1]
是指向Fields
集合中实际TField
对象的指针。 该指针是您尝试存储在 ComboBox 中的内容,而不是TField
表示的int
值。
您需要调用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
。