解决 没有阻力&从treeview放到listview

aw48

活跃成员
已加入
2013年2月9日
留言内容
35
位置
德国
编程经验
10+
你好
我将treeview项(确切地说是图文文本)拖到应该显示路径的listview时遇到问题
树形视图是用户控件类库的组件。
我使用treeview_itemdrag调用DoDragDrop()。
一旦我移动鼠标,就会显示不允许/无效-符号(不知道如何调用从左上到右下的小圆圈)
我浪费了很多时间在谷歌上搜索,但是有了样本,我看不到我有什么丢失
有任何想法吗 ?提前致谢
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,443
位置
弗吉尼亚州切萨皮克
编程经验
10+
您浏览过这些文件了吗?




或者,您不想浏览这些文档,而只是希望有人为您做一些了解,并为您提供代码即可使用(如果您要对双关语原谅的话)。
 

aw48

活跃成员
已加入
2013年2月9日
留言内容
35
位置
德国
编程经验
10+
我之前确实拖放过,但看不到应该丢失什么代码。从树视图中,我只需要ItemDrag,而在列表视图中,我需要DragEnter和DragDrop。但这是树视图,不允许任何拖动
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,443
位置
弗吉尼亚州切萨皮克
编程经验
10+
如果您共享代码,这对我们有很大帮助。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,443
位置
弗吉尼亚州切萨皮克
编程经验
10+
以下对我有用:
C#:
using System;
using System.Drawing;
using System.Windows.Forms;

public class TestForm : Form
{
    public TestForm()
    {
        var treeView = new TreeView()
        {
            Dock = DockStyle.Left
        };
        treeView.ItemDrag += (o, e) =>
        {
            var effect = DragDropEffects.None;
            if (e.Button == MouseButtons.Left)
                effect = DragDropEffects.Move;
            else if (e.Button == MouseButtons.Right)
                effect = DragDropEffects.Copy;
            DoDragDrop(e.Item, effect);
        };

        var listView = new ListView()
        {
            AllowDrop = true,
            Dock = DockStyle.Fill
        };
        listView.DragEnter += (o, e) => e.Effect = e.AllowedEffect;

        for (int x = 0; x < 3; ++x)
        {
            var node = treeView.Nodes.Add(String.Format("Node{0}", x * 4));
            for (int y = 1; y < 4; ++y)
                node = node.Nodes.Add(String.Format("Node{0}", x * 4 + y));
        }

        this.SuspendLayout();
        this.ClientSize = new Size(400, 300);
        this.Controls.Add(treeView);
        this.Controls.Add(listView);
        this.ResumeLayout(false);
    }

    [STAThread]
    static void Main()
    {
        Application.Run(new TestForm());
    }
}

由于您之前已经完成了拖放操作,因此请记住,拖动效果取决于预期放置的位置,而不是取决于拖放的来源。这意味着,当鼠标处于树状视图中时,将显示no drop光标。

So the case above, I don't want my tree view to accept drops so I don't set AllowDrop to true nor do I implement a DragEnter handler. On the other hand, I do want my list view to accept drops, so I set AllowDrop to true, and set the drop effect in DragEnter event handler.
 

aw48

活跃成员
已加入
2013年2月9日
留言内容
35
位置
德国
编程经验
10+
// **************************************************** ****************************************
私人void tvwMain_ItemDrag(object sender,ItemDragEventArgs e)
// **************************************************** ****************************************
{
TreeNode sourceNode =(TreeNode)e.Item;
DragDropEffects dde ​​= tvwMain.DoDragDrop(sourceNode.Tag.ToString(),DragDropEffects.All);
}

目前,我使用的参数是“ sourceNode.Tag.ToString()”。最初我有'sourceNode',然后有'sourceNode.Text','sourceNode.Tag',但没有任何效果。
请记住,tvwMain不是我的程序的控件。它是添加到表单的用户控件的一个组成部分。
 

aw48

活跃成员
已加入
2013年2月9日
留言内容
35
位置
德国
编程经验
10+
实际上,我从来没有尝试过拖动到listview上。没有放置光标使我相信某些东西无法正常工作。一切都很好。
顺便说一句,我不需要区分鼠标按钮,因为我只想要列表视图中树视图项目的路径
“这意味着当鼠标处于树状视图中时,则不显示任何放置光标”,这就是解决方案
谢谢
 
最佳 底部