簡體   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