Реализация перетаскивания в Winforms, используя Treeview и Split Controls - PullRequest
3 голосов
/ 12 июня 2009

У меня есть форма с двумя разделителями. Один разделитель разбивает форму по горизонтали на 2 столбца. Другой разбивает левый столбец на 2 строки.

В левом столбце вверху «ряда» у меня есть древовидная структура. В правом столбце у меня есть просмотрщик изображений.

Я хочу поместить узел дерева в средство просмотра изображений и что-то с ним сделать.

Зритель называется «зритель». Древовидная структура называется "EntityTreeView"

Код выглядит следующим образом:

 private void viewer_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Move;
    }

    private void viewer_DragDrop(object sender, DragEventArgs e)
    {
        TreeNode droppedNode;
        droppedNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
        MessageBox.Show(String.Format("You dropped a node with text: {0}\n on the viewer at X:{1} Y:{2}", droppedNode.Text, e.X, e.Y), "Drag Drop Finished", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }

    private void EntityTreeView_ItemDrag(object sender, ItemDragEventArgs e)
    {
        DoDragDrop(e.Item, DragDropEffects.Move);

    }

    private void EntityTreeView_DragDrop(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Move;
    }


    private void EntityTreeView_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.None;
    }

Однако всякий раз, когда я беру узел дерева и начинаю его перетаскивать, на нем сразу же появляется значок «Нет» (т. Е. Знак «не курить» ... круг с косой чертой, как бы это ни называлось).

Есть идеи, что я делаю не так?

Заранее спасибо за любую помощь.

Ответы [ 2 ]

4 голосов
/ 12 июня 2009

Ваш код выглядит хорошо до сих пор. Что вам нужно сделать, так это установить для свойства AllowDrop в «средстве просмотра» значение true .

0 голосов
/ 12 июня 2009

Вам необходимо установить e.Effect в событии DragEnter равным DragDropEffects.Move

private void EntityTreeView_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.Move    
}
...