void UpDownNode(TTreeNode * node,bool up,int level)
{
TTreeNode *TargetNode;
if (level!=-1) //同级间移动
{
if (node != NULL) //检查是否有选中节点 如果有则做上移操作
{
if (up) //上移
{
if (node->GetPrev() != NULL)
{
TargetNode = node->GetPrev();
while (TargetNode->Level != level)
{
if (TargetNode->GetPrev()==NULL )
break;
else
TargetNode = TargetNode->GetPrev();
}
if (TargetNode != NULL)
{
if (TargetNode->Level ==level)
{
if (node->getPrevSibling() != NULL) //检查是否有同级前节点,如果有做上移操作
{
if (node->getPrevSibling() != NULL)
node->MoveTo(TargetNode,naInsert);
else
node->MoveTo(TargetNode,naAddFirst);
}
else
node->MoveTo(TargetNode,naAdd);
}
}
}
}
else //下移
{
if (node->GetNext() != NULL)
{
TargetNode = node->GetNext();
while (TargetNode->Level != level)
{
if (TargetNode->GetNext()==NULL)
break;
else
TargetNode = TargetNode->GetNext();
}
if (TargetNode != NULL)
{
if (TargetNode->Level == level)
{
if (node->getNextSibling() != NULL) //检查是否有同级下节点,假如有作下移操作
{
if (TargetNode->getNextSibling() != NULL)
node->MoveTo(TargetNode->getNextSibling(),naInsert);
else
node->MoveTo(TargetNode,naAdd);
}
else
node->MoveTo(TargetNode,naInsert);
}
}
}
}
}
}
else //容许跨级移动
{
if (node != NULL) //检查是否有选中节点 假如有则做上移操作
{
if (up) //上移
{
if (node->GetPrev() != NULL)
{
TargetNode = node->GetPrev();
if (TargetNode != NULL)
{
if (node->GetPrev() != NULL) //检查是否有同级前节点,如果有做上移操作
{
if (node->GetPrev() != NULL)
node->MoveTo(TargetNode,naInsert);
else
node->MoveTo(TargetNode,naAddFirst);
}
else
node->MoveTo(TargetNode,naAdd);
}
}
}
else //下移
{
if (node->GetNext() != NULL)
{
TargetNode = node->GetNext();
while (TargetNode->Parent == node)
{
if (TargetNode->GetNext() == NULL)
break;
else
TargetNode = TargetNode->GetNext();
}
if (TargetNode != NULL)
{
if (node->GetNext() != NULL) //检查是否有同级下节点,假如有上移操作
{
if (TargetNode->GetNext() != NULL)
node->MoveTo(TargetNode->GetNext(),naInsert);
else
node->MoveTo(TargetNode,naAdd);
}
else
node->MoveTo(TargetNode,naAdd);
}
}
}
}
}
}
调用方法:
void __fastcall TForm1::Button12Click(TObject *Sender)
{
UpDownNode(TreeView1->Selected,true,TreeView1->Selected->Level);//上移
for(int i=1;i<TreeView1->Items->Count;i++)
{
TreeView1->Items->Item[i]->ImageIndex = i;
TreeView1->Items->Item[i]->SelectedIndex = i;
TreeView1->Items->Item[i]->StateIndex = i;
//TreeView1->Items->Item[i]->TreeView->Invalidate();
}
TreeView1->Refresh();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button13Click(TObject *Sender)
{
UpDownNode(TreeView1->Selected,false,TreeView1->Selected->Level);下移
for(int i=1;i<TreeView1->Items->Count;i++)
{
TreeView1->Items->Item[i]->ImageIndex = i;
TreeView1->Items->Item[i]->SelectedIndex = i;
TreeView1->Items->Item[i]->StateIndex = i;
//TreeView1->Items->Item[i]->TreeView->Invalidate();
}
TreeView1->Refresh();
}