help!!!! ..怎么没人回答....再问一下,treeview 显示乱码,不胜感激.....

specialkid 2004-10-10 04:54:02
help!!!! ...........treeview 显示乱码,不胜感激.....

求救,各位大侠,请问一关于treeview的问题.不胜感激.
void __fastcall TForm1::BuildingTree(TTreeNode * node, AnsiString Table, int code)
{
//TODO: Add your source code here
TTreeNode *tNode,*mNode;
TTreeNode *SubNode,*SubNode2;
AnsiString sql,str;
AnsiString name,id;
AnsiString name2,id2;
if (node == NULL)
{
sql = "select * from office";
RunQuery(ADOQuery1,sql);
while (!ADOQuery1->Eof)
{

id = ADOQuery1->FieldByName("ID")->Value;
name = ADOQuery1->FieldByName("Name")->Value;
node = TreeView2->Items->Add(NULL,name); //第一层节点
node->Data = id.c_str();
// Node_Data *nd= new Node_Data; nd->data = id;

sql = "select * from Unit where OfficeID='"+id+"'";
ShowMessage(id);//此里的id显示正常.
RunQuery(ADOQuery2,sql);
while (!ADOQuery2->Eof)
{
id2 = ADOQuery2->FieldByName("ID")->Value;

name2 = ADOQuery2->FieldByName("Name")->Value;
SubNode = TreeView2->Items->AddChild(node,name2); //第二层节点
SubNode->Data = id2.c_str(); //问题会不会出现在这样的类型转换里.????
ShowMessage(id2);//此里的id2显示正常.

ADOQuery2->Next();
}

ADOQuery1->Next();
}

}
}


void __fastcall TForm1::TreeView2Click(TObject *Sender)
{
AnsiString s=AnsiString((char*)TreeView2->Selected->Data);
//问题会不会出现在这样的类型转换里.????


ShowMessage(s);
}
运行后整棵树的遍历是正确的.
我想问一下,为何我这里(treeview单击)弹出来的s也即是id,id2,怎么有些是乱码.
我已经在程序中保存了id,id2(每次的值不同的)的值到SubNode->Data (节点的数据中),
请问这是为什么.不胜感激
在线等待.............
...全文
53 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wiseyao 2004-10-10
  • 打赏
  • 举报
回复
小心,你的id2是局部变量,C规定函数退出后会释放掉局部变量的,这样你这句话得到的数值就是不确定的SubNode->Data = id2.c_str();,Data是void*型,可以定认一个char*的类型分配空间后指向,如:
char *id2=new char[100];
SubNode->Data = id2;
注意:在窗体的OnClose或OnDestroy事件里必须释放掉每个节点的Data属性的指针,否则会造成内存泄漏
3xcom 2004-10-10
  • 打赏
  • 举报
回复
UP..........

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧