!!!!!!在运行中动态地加节点??

fengxia0078 2004-05-05 09:28:29
TTreeNode *Node1;
TreeView1->Items->Clear(); // remove any existing nodes
TreeView1->Items->Add(NULL, "RootNode1"); // Add a root node

/* Set MyTreeNode to first node in tree view and add a child node to it */
Node1 = TreeView1->Items->Item[0];
TreeView1->Items->AddChild(Node1,"ChildNode1");

// Add another root node
TreeView1->Items->Add(Node1, "RootNode2");

/* Reset Node1 to RootNode2 and add a child node to it */

Node1 = TreeView1->Items->Item[2];
TreeView1->Items->AddChild(Node1,"ChildNode2");

/* Reset Node1 to ChildNode2 and add a child node to it */
Node1 = TreeView1->Items->Item[3];
TreeView1->Items->AddChild(Node1,"ChildNode2a");

/* Add another child to ChildNode2 following ChildNode2a */
TreeView1->Items->AddChild(Node1,"ChildNode2b");

// add another root node
TreeView1->Items->Add(TreeView1->Items->Item[0], "RootTreeNode3");

这个树中, Node1 = TreeView1->Items->Item[2];
TreeView1->Items->AddChild(Node1,"ChildNode2");
只能按总的顺序(父节点和子节点)来addchild,我想在六个父节点中,根据需要
加子节点,比如我的某个子窗口调用一次,就在主窗口的树中相应父节点下加一个子节点??????
...全文
8 16 点赞 打赏 收藏 举报
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fengxia0078 2004-05-07
吃了饭再来整!!
  • 打赏
  • 举报
回复
真如实观 2004-05-07
我是想定义一个函数:TTreeNode* __fastcall FindNode(TTreeNodes *tNode,int MyID);
函数中将用到:
typedef struct TreeDataInfo
{
int myid,myparrentid;
}TMyDataInfo;
typedef TMyDataInfo *pMyDataInfo;
通过MyID来查找一个TTreeNode*,这个TTreeNode*就是你要找的节点,然后你在此节点下添加子节点就可以了。
哎,在vc下CTreeCtrl的节点Data是个long类型,在bcb则是void指针,可以存贮任何数据类型,但是必须通过一个结构指针来传递。pMyDataInfo(MyNode->Data)->myid;
对不起,我还没搞清楚。
  • 打赏
  • 举报
回复
fengxia0078 2004-05-07
我今天准备熬夜!!
有志同道合的报名!
  • 打赏
  • 举报
回复
fengxia0078 2004-05-07
Node->Data好象说的不是这方面的问题吧,我看了一些文章,都说的是用Node->Data作指针,
来指某一个值,你是说:Node->Data所指的值来定位?
  • 打赏
  • 举报
回复
weixing979 2004-05-07
楼上两位的就应该行了吧。
  • 打赏
  • 举报
回复
真如实观 2004-05-07
//你选中某个Item后才能不断的点Button1
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString temptext = AnsiString("Of parrent" + AnsiString(TreeView1->Items->Count));

TTreeNode* node = TreeView1->Selected;
if(!node)
{
node=TreeView1->Items->Add(NULL,"A");
}

TTreeNode* tempnode = TreeView1->Items->AddChild(node,temptext);

tempnode->ImageIndex = 0;
tempnode->SelectedIndex = 0;

tempnode->ImageIndex = 1;
tempnode->SelectedIndex = 1;
AddCountToNode(TreeView1->Items);

}
  • 打赏
  • 举报
回复
真如实观 2004-05-07
AnsiString temptext = AnsiString("Of parrent" + AnsiString(TreeView1->Items->Count));

TTreeNode* node = TreeView1->Selected;
if(!node)
{
node=TreeView1->Items->Add(NULL,"A");
}

TTreeNode* tempnode = TreeView1->Items->AddChild(node,temptext);

tempnode->ImageIndex = 0;
tempnode->SelectedIndex = 0;

tempnode->ImageIndex = 1;
tempnode->SelectedIndex = 1;
AddCountToNode(TreeView1->Items);
//////////////////////////////////////////////////////////
bool __fastcall TForm1::StripParenCount(AnsiString &text)
{
AnsiString NewName;
bool result = true;
int location = text.AnsiPos(" (");
if (location > 0)
{
NewName = text.SubString(1,(location-1));
result = true;
}
else
{
result = false;
return result;
}
text = NewName;
return result;
}
/////////////////////////////////////////////////////
void __fastcall TForm1::AddCountToNode(TTreeNodes* tree)
{
tree->BeginUpdate();
TTreeNode *CurItem = tree->GetFirstNode();
while (CurItem)
{
CurItem->Count;
AnsiString NewName = CurItem->Text;
StripParenCount(NewName);

if (CurItem->Count > 0)
CurItem->Text = NewName + " (" + CurItem->Count + ")";
else
CurItem->Text = NewName;
CurItem = CurItem->GetNext();
}
tree->EndUpdate();
}
  • 打赏
  • 举报
回复
fengxia0078 2004-05-07
还是觉得不太懂。
假设Form1上有一个TreeView含两个父节点A,B,有两个Button1,Button2,
点击一下Button1在A下加一个子节点,B同。
请给出大概的代码?
  • 打赏
  • 举报
回复
fengxia0078 2004-05-06
我对这方面了解得很少,
希望多提示一下
我先想想你们说的。
  • 打赏
  • 举报
回复
fengxia0078 2004-05-06
Node1 = TreeView1->Items->Item[2];这是第三个父节点(假设只有三个父节点),如果我在
Item[0]中加一个子节点,那么第三个父节点就是Item[2]了!
??????郁闷!
  • 打赏
  • 举报
回复
真如实观 2004-05-06
你可以考虑使用Node->Data;但是它返回void指针,需要定义一个结构用语存储Data,这可根据你的具体情况了,这方面我没有太多的经验,你可以搜索以前的帖子。
  • 打赏
  • 举报
回复
xiaoshi0 2004-05-06
晕死,关键还是指针的问题。
  • 打赏
  • 举报
回复
真如实观 2004-05-06
我发现你都是用“确定值”---TreeView1->Items->Item[x];
在TTreeView用“确定值”很不可靠,我想。
首先,你添加的节点凭何值的?
  • 打赏
  • 举报
回复
fengxia0078 2004-05-06
我突然想到:
因为我要建的是三级的树,第一级六个(大类),每个大类各有4-6个节点(*.exe),每个exe节点下根据它运行的条件(不同的参数)记录下来可能要十个左右的节点(参数文件):
我可以把6*4*10大约250个节点全定义好(item[0]-item[249]),需要“加”节点时,设为可视就行了!!!!
  • 打赏
  • 举报
回复
真如实观 2004-05-06
先报到,现在比较忙,等一等。
  • 打赏
  • 举报
回复
GeoPhoenix 2004-05-05
没怎么用过,是否应该先选择相应的父结点,再插入?
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ Builder
加入

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
帖子事件
创建了帖子
2004-05-05 09:28
社区公告
暂无公告