繁体   English   中英

如何实现拖放以允许重新排列 ListView 中的项目?

[英]How can I implement drag-and-drop to allow rearranging items in a ListView?

我想在 ListView 中启用对拖放的支持,以便用户可以重新排列项目,类似于他们在 Windows Explorer 中可以做的事情。

具体来说,如何在双击 ListView 时启用 Drag 事件处理程序?

这是我双击 ListView 后得到的:

private void listView1(object sender, EventArgs e)

但是,我希望它是:

private void listView(object sender, DragEventArgs e)

我怎样才能做到这一点?

我尝试了很多方法,例如:

  private void Form_Load(object sender, EventArgs e)
  {
      // Enable drag and drop for this form
      // (this can also be applied to any controls)
      this.AllowDrop = true;

      // Add event handlers for the drag & drop functionality
      this.DragEnter += new DragEventHandler(Form_DragEnter);
      this.DragDrop += new DragEventHandler(Form_DragDrop);
 }

但这些似乎都不起作用。

您需要实现DragEnter事件并设置DragEventArgs的Effect属性。 DragEnter事件是使事物可以放入控件的原因。 之后,释放鼠标按钮时将触发DragDrop事件。

这是一个允许将对象放入ListView的版本:

    private void Form1_Load(object sender, EventArgs e)
    {
        listView1.AllowDrop = true;
        listView1.DragDrop += new DragEventHandler(listView1_DragDrop);
        listView1.DragEnter += new DragEventHandler(listView1_DragEnter);
    }

    void listView1_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Copy;
    }

    void listView1_DragDrop(object sender, DragEventArgs e)
    {
        listView1.Items.Add(e.Data.ToString());
    }

毫无疑问,您的示例代码来自: http : //msdn.microsoft.com/zh-cn/library/system.windows.forms.control.allowdrop(v=vs.71).aspx

回答您的问题:没有用于在 ListView 控件中拖放项目的内置功能。 甚至 MSDN 文档也指示您为各种事件实现自己的代码隐藏以实现此功能(请参阅ListViewInsertionMark Class

ObjectListView (围绕 .NET WinForms ListView 的开源包装器)无需进一步工作即可提供此功能(加上许多其他不错的功能)。 查看演示的“拖放”选项卡。

使用中的 ObjectListView 的屏幕截图,显示了拖放式插入符号。

(来源: codeproject.com

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM