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

dbf7pr2w  于 2023-02-05  发布在  其他
关注(0)|答案(3)|浏览(159)

我想在ListView中启用对拖放的支持,这样用户就可以重新排列项目,类似于他们在Windows资源管理器中可以做的事情。
具体来说,当我双击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);
 }

但这些似乎都不起作用。

zzlelutf

zzlelutf1#

您需要实现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/en-us/library/system.windows.forms.control.allowdrop(v=vs.71).aspx

lyr7nygr

lyr7nygr2#

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

0pizxfdo

0pizxfdo3#

ObjectListView(一个围绕.NET WinForms ListView的开源 Package 器)提供了这种功能,而无需进一步的工作(加上许多其他nice features)。

(来源:codeproject.com

相关问题