c#winform treeview Dragdrop效果

时间:2011-04-10 20:38:38

标签: c# winforms .net-2.0

我想通过更改鼠标上的图标向用户表明他们正在尝试拖动到错误的节点级别。我似乎无法掌握这个...任何建议?

2 个答案:

答案 0 :(得分:1)

删除树视图是一个不确定的主张,用户想要放下的节点可能不可见。要么是因为它已折叠并隐藏或滚动屏幕。 Anyhoo,您想使用DragOver事件并检查鼠标所在的位置。这是一个执行此操作的示例表单。删除树视图并添加一些节点。单击表单并拖动。它只允许第二级节点上的丢弃:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        treeView1.AllowDrop = true;
        treeView1.DragEnter += treeView1_DragEnter;
        treeView1.DragOver += treeView1_DragOver;
    }
    protected override void OnMouseDown(MouseEventArgs e) {
        DoDragDrop("foo", DragDropEffects.Copy);
        base.OnMouseDown(e);
    }
    private void treeView1_DragEnter(object sender, DragEventArgs e) {
        // TODO: check e.Data
        e.Effect = DragDropEffects.Copy;
    }
    private void treeView1_DragOver(object sender, DragEventArgs e) {
        Point pos = treeView1.PointToClient(new Point(e.X, e.Y));
        var hit = treeView1.HitTest(pos);
        TreeNode node = hit.Node;
        if (hit.Node != null) {
            node.Expand();
            if (node.Level != 1) node = null;
        }
        e.Effect = node != null ? DragDropEffects.Copy : DragDropEffects.None;
    }
}

答案 1 :(得分:0)

检查http://msdn.microsoft.com/en-us/library/system.windows.forms.drageventargs.aspx以获取DragEventArgs的文档。您应该将效果设置为无:

  e.Effect = DragDropEffects.None;