2013-01-22 49 views
0

我有一個ListView 3組。 我拖動一個項目從TreeView控件到ListView控件:拖動並添加項目ListView

private void listViewDemo_DragDrop(object sender, DragEventArgs e) 
{ 
    if (!is_listview) //treeview item 
    { 
     //get a text of a draged item 
     string str = e.Data.GetData(DataFormats.Text).ToString(); 
     //get information about hovered item 
     ListViewHitTestInfo hit_info = listViewDemo.HitTest(listViewDemo.PointToClient(new Point(e.X, e.Y))); 
     //check position - must be on an item 
     if (hit_info.Location == ListViewHitTestLocations.None) return; 
     ListViewItem prev_item = hit_info.Item; 
     ListViewGroup group = prev_item.Group; 
     int idx = prev_item.Index; 
     //create a new key 
     Guid key = Guid.NewGuid(); 
     string item_key = key.ToString(); 
     //create a new item 
     //option 1 
     group.Items.Add(listViewDemo.Items.Insert(idx,item_key, str, "")); 
     //option2 
     //group.Items.Insert(idx,listViewDemo.Items.Insert(idx, item_key, str, "")); 
    } 
} 

我期待到位尖項目的添加項目,但任何選項組的末尾添加元素。 如何在鼠標懸停的地方添加項目?

回答

1

假設您想將項目放在鼠標指針的項目之前......(這有點蠻力,但有效)。

我還想指出,您的原始代碼是在整個列表中找到熱點項目的索引。我添加了IndexOf調用來從組中獲取它。

  if (!is_listview) //treeview item 
      { 
       //get a text of a dragged item 
       string str = e.Data.GetData(DataFormats.Text).ToString(); 
       //get information about hovered item 
       ListViewHitTestInfo hit_info = listView1.HitTest(listView1.PointToClient(new Point(e.X, e.Y))); 
       //check position - must be on an item 
       if (hit_info.Location == ListViewHitTestLocations.None) return; 
       ListViewItem prev_item = hit_info.Item; 
       ListViewGroup group = prev_item.Group; 
       int idx = group.Items.IndexOf(prev_item); 
       //create a new key 
       Guid key = Guid.NewGuid(); 
       string item_key = key.ToString(); 
       //create a new item 
       //option 1 
       List<ListViewItem> list = new List<ListViewItem>(); 
       while(group.Items.Count > 0) 
       { 
        ListViewItem lvi = group.Items[0]; 
        listView1.Items.Remove(lvi); 
        list.Add(lvi); 
       } 

       group.Items.Clear(); 
       ListViewItem item = new ListViewItem(str, ""); 
       item.Name = item_key; 
       list.Insert(idx, item); 
       foreach (ListViewItem i in list) 
       { 
        listView1.Items.Add(i); 
        group.Items.Add(i); 
       } 
      } 
+0

非常感謝你,它非常棒! – john7

+0

如果我想添加:list.Insert(idx + 1,item);太棒了! – john7

+0

好極了......好像它應該在給定你的原始代碼的情況下工作,事實上,該項目進入group.Items列表中的右側插槽,但顯然渲染使用了其他優先級。 –