Как переместить SELECTION на исходный узел, когда подузел исходного узла выбран и отброшен на подузле конечного узла - PullRequest
0 голосов
/ 29 января 2020

У меня есть элемент управления TreeView в C# Windows приложении, в котором реализована функция перетаскивания. Ниже приведен код для события ItemDrag.

private void tvwAttributes_ItemDrag(object sender, ItemDragEventArgs e)
{
    TreeNode selNode = (TreeNode)e.Item;
    tvwAttributes.SelectedNode = selNode;

    timer1.Enabled = true;
    DoDragDrop(e.Item, DragDropEffects.Move);
}

Ниже приведено событие Tick для элемента управления таймером, который разрешает автоматическую прокрутку вертикальной полосы прокрутки после перетаскивания узла и перемещения узла вниз или верхняя часть Treeview элемента управления

private void timer1_Tick(object sender, EventArgs e)
{
    //if we hit the timer and no buttons are pressed then stop
    if (Control.MouseButtons == MouseButtons.None)
    {
        timer1.Enabled = false;
        return;
    }

    // get node at mouse position
    System.Drawing.Point pt = this.tvwAttributes.PointToClient(Control.MousePosition);
    TreeNode node = this.tvwAttributes.GetNodeAt(pt);

    if (node == null) return;

    // if mouse is near to the top, scroll up
    if (pt.Y < 30)
    {
        // set actual node to the upper one
        if (node.PrevVisibleNode != null)
        {
            node = node.PrevVisibleNode;

            // scroll and refresh
            node.EnsureVisible();
            this.tvwAttributes.Refresh();
        }
    }
    // if mouse is near to the bottom, scroll down
    else if (pt.Y > this.tvwAttributes.Size.Height - 30)
    {
        if (node.NextVisibleNode != null)
        {
            node = node.NextVisibleNode;

            node.EnsureVisible();
            this.tvwAttributes.Refresh();
        }
    }
}

Я хочу реализовать, как показано ниже, для достижения ВЫБОР из ОТ УЗЛА после перетаскивания элемента в пункт назначения узел

//The Source Node is picked as below
TreeNode DragNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");

И после того, как он отброшен, приведенный ниже код я хочу реализовать.

if(DragNode != null)
{
    tvwAttributes.SelectedNode = DragNode;
}

Для этого я не знаю точное место, где разместить 2 вышеупомянутых раздела кода.

Любая помощь будет принята с благодарностью.

...