15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как перетаскивать элементы из TreeView в ListBox.

Компилятор: C++ Builder

Ниже приведён пример, который имеет TreeView с главным узлом (node) с названием "Cars", который в свою очередь имеет ветви makes и models. ListBox может получать при перетаскивании как целые ветви, так и отдельные элементы. Как у ListBox, так и у TreeView свойство DragMode установлено в dmAutomatic.

//---------------------------------------------------------------------------

void __fastcall TForm1::ListBox1DragDrop(TObject *Sender, TObject
*Source, int X, int Y)
{
    if (Sender->ClassNameIs("TListBox") && Source->ClassNameIs("TTreeView"))
    {
        //=== Перетаскивание Cars (Главного узла) ===//
        if (TreeView1->Selected->AbsoluteIndex == 0)
        {
           TTreeNode *Node = TreeView1->Items->Item[0]->GetNext();
           while (Node != NULL)
           {
              if (Node->Level == 2)
                  ListBox1->Items->Add(Node->Text);
              Node = Node->GetNext();
           }
        }

        //=== Перетаскивание make ===//
        if (TreeView1->Selected->Level == 1)
        {
            int count = 0;
            TTreeNode *Node = TreeView1->Selected->GetNext();
            while (Node != NULL && Node->HasChildren == false)
            {
                ListBox1->Items->Add(Node->Text);
                if (count < TreeView1->Selected->Count) Node = Node->GetNext();
                count ++;
            }
        }

       //=== Перетаскивание model ===//
       if (TreeView1->Selected->Level == 2) ListBox1->Items->Add(TreeView1->Selected->Text);
     }
}