【问题标题】:Cannot Drag from Explorer onto ListView无法从资源管理器拖动到 ListView
【发布时间】:2012-03-06 15:53:04
【问题描述】:

我到处都看到了这种情况并尝试了所有解决方案,但似乎没有得到我想要的。我希望能够将文件从资源管理器拖放到 ListView 上,然后能够通过拖放对它们进行排序。我有这个从资源管理器中获取拖放的简单代码。

        this.messageView.AllowDrop = true;
        this.messageView.Location = new System.Drawing.Point(12, 52);
        this.messageView.Name = "messageGrid";
        this.messageView.Size = new System.Drawing.Size(121, 97);
        this.messageView.TabIndex = 3;
        this.messageView.UseCompatibleStateImageBehavior = false;
        this.messageView.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop);
        this.messageView.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);

和处理程序

        private void Form1_DragEnter(object sender, DragEventArgs e)
        {

        if (e.Data.GetDataPresent("FileGroupDescriptor"))
            {
            e.Effect = DragDropEffects.All;
            }
        }

    private void Form1_DragDrop(object sender, DragEventArgs e)
        {
        messageView.Items.Add(e.Data.ToString());
        }

这很奇怪,因为我将 messageView 更改为我的表单上的 RichTextBox,它工作得很好。我还需要执行其他步骤吗?当我尝试放到 ListView 上时,我从资源管理器中得到一个带有一条线的圆圈。任何帮助,将不胜感激。谢谢。

【问题讨论】:

    标签: c# listview drag-and-drop


    【解决方案1】:

    DragEnter 和 DragDrop 事件应该在 ListView 中处理,而不是在 Form 中。 关于拖放:我不记得文章名称,但我在 codeproject 中找到了一个很好的例子。

    【讨论】:

    • 它们在列表视图中处理,只是它们的名称有点时髦。它们是否需要在 InitializeComponent() 以外的地方进行初始化
    • 将“FileGroupDescriptor”更改为常量 DataFormats.FileDrop,正确的字符串应该是 FileDrop,并且在 DragDrop 事件中,您可以使用 e.Data 获取正确的数据(可以迭代的字符串 []) .GetData() 方法而不是 ToString()。
    猜你喜欢
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2013-03-20
    • 2016-10-31
    • 2010-09-21
    相关资源
    最近更新 更多