使用Treeview&amp ;;在Winforms中实现拖放拆分控件

时间:2009-06-12 13:39:45

标签: winforms treeview drag-and-drop

我有一个有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 个答案:

答案 0 :(得分:4)

到目前为止,您的代码看起来很好。您需要做的是将“viewer”上的 AllowDrop 属性设置为 true

答案 1 :(得分:0)

您需要将DragEnter事件中的e.Effect设置为DragDropEffects.Move

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