2015-01-14 2 views
-1

Я пытаюсь перетащить ListViewItem из одного ListView в другое приложение Windows Form. У меня есть два ListViews: lvImageFolder и lvWebServer. Я пытаюсь перетащить с lvImageFolder в lvWebServer.C# ListView Drag and Drop

Мой код показан ниже:

private void lvImageFolder_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     txtCursor.Text = Cursor.Position.ToString(); 
     lvWebServer.DoDragDrop(lvImageFolder.Items[0].Text, DragDropEffects.Move); 
    } 

} 

private void lvWebServer_DragDrop(object sender, DragEventArgs e) 
{ 
    string dragToItem = e.Data.GetData(DataFormats.Text).ToString(); 

    lvWebServer.Items.Add(dragToItem); 
} 

private void lvWebServer_DragEnter(object sender, DragEventArgs e) 
{ 
    if (e.Data.GetDataPresent(DataFormats.Text)) 
    { 
     e.Effect = DragDropEffects.Move; 
    } 
    else 
    { 
     e.Effect = DragDropEffects.None; 
    } 
} 

Проблема, которую я имею что строка dragToItem пуста. Я попытался передать в сериализованном объекте метод DoDragDrop, но это не дало мне ничего, кроме вопросов.

Может ли кто-нибудь пролить свет на эту проблему?

+0

Я заметил, что в 'lvImageFolder_MouseDown' вы всегда используете текст первого элемента в списке. Это намеренно? – adv12

ответ

0

Изменение линии под ним работает, но, как adv12 писал, копия всегда первый пункт:

lvWebServer.DoDragDrop(lvImageFolder.Items[0].ToString(), DragDropEffects.Move); 

изменить его на приведенный ниже код для перетаскивания выбранного элемента:

lvWebServer.DoDragDrop(lvImageFolder.SelectedItem, DragDropEffects.Move); 
0

Потому что вы начинаете перетаскивать с позиции позиции списка [0], и, возможно, это пустой элемент. Вы должны начать перетаскивание с выбранными элементами зрения соответствующего списка, например:

private void lvImageFolder_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     //txtCursor.Text = Cursor.Position.ToString(); 
     if (lvImageFolder.SelectedItems.Count > 0) 
     { 
      var lst = new List<string>(); 
      foreach (ListViewItem item in lvImageFolder.SelectedItems) 
      { 
       lst.Add(item.Text); 
      } 
      lvWebServer.DoDragDrop(lst, DragDropEffects.Move); 
     } 
    } 

} 

private void lvWebServer_DragDrop(object sender, DragEventArgs e) 
{ 
    List<string> lst = e.Data.GetData(typeof(List<string>)) as List<string>; 
    foreach (var item in lst) 
    { 
     lvWebServer.Items.Add(item); 
    } 

} 

private void lvWebServer_DragEnter(object sender, DragEventArgs e) 
{ 
    if (e.Data.GetDataPresent(typeof(List<string>))) 
    { 
     e.Effect = DragDropEffects.Move; 
    } 
    else 
    { 
     e.Effect = DragDropEffects.None; 
    } 
}