[英]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 的開源包裝器)無需進一步工作即可提供此功能(加上許多其他不錯的功能)。 查看演示的“拖放”選項卡。
(來源: codeproject.com )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.