2010-05-20 16 views
5

Jak przeciągnąć element z kontrolki WinFort-listview do innej kontrolki (obrazek kosza)?C# - Przeciągnij element poza listview do kosza?

UPDATE1:

myślę podstawowy przepływ jest:

  • dla zdarzenia ItemDrag na ListView posiada DoDragDrop
  • wtedy zdarzenie DragEnter na PictureBox, który przechwytuje, że opór ?

Update2:

Przepływ podstawowy (na podstawie odpowiedzi):

  • Dodaj imprezę 'ItemDrag' do ListView.
  • dodaj 'DoDragDrop' wewnątrz 'ItemDrag'
  • dodaj zdarzenie "DragEnter" do obrazka.
  • dodać Sprawdź „GetDataPresent” wewnątrz „DragEnter” w celu sprawdzenia typu danych
  • dodać zdarzenie „dragdrop” do PictureBox
  • dodać Sprawdź „GetDataPresent” wewnątrz „DragEnter” Aby sprawdzić Typ danych

Odpowiedz

14

Wdrożenie programu obsługi zdarzeń dla zdarzenia widoku listy za ItemDrag:

private void listView1_ItemDrag(object sender, ItemDragEventArgs e) { 
     DoDragDrop(e.Item, DragDropEffects.Move); 
    } 

i napisać obsługi zdarzeń do kosza:

private void trashCan_DragEnter(object sender, DragEventArgs e) { 
     if (e.Data.GetDataPresent(typeof(ListViewItem))) { 
      e.Effect = DragDropEffects.Move; 
     } 
     // others... 
    } 

    private void trashCan_DragDrop(object sender, DragEventArgs e) { 
     if (e.Data.GetDataPresent(typeof(ListViewItem))) { 
      var item = e.Data.GetData(typeof(ListViewItem)) as ListViewItem; 
      item.ListView.Items.Remove(item); 
     } 
     // others... 
    } 

Musisz zmusić właściwość AllowDrop dla PictureBox, nie jest dostępna w oknie właściwości:

public Form1() { 
     InitializeComponent(); 
     trashCan.AllowDrop = true; 
    } 
+0

Dzięki @Hans! Próbki naprawdę pomogły mi uzyskać właściwą drogę –

2

EDIT dotyczy to tylko jeśli chcesz zintegrować powłoki drag-and-drop. Jeśli nie integrujesz się z powłoką, a jedynie przeciągasz i upuszczasz między rzeczami we własnej aplikacji, ta odpowiedź nie ma zastosowania. Moje przeprosiny za zamieszanie.


Trzeba Wsparcie przeciągnij i upuść w aplikacji lub kontrolą. Wiąże się to z pewnym współdziałaniem COM.

Z początku wydaje się nieco skomplikowane, ale gdy już zdobędziesz podstawowy szkielet, nie jest to trudne do wdrożenia. Również jest ładny przypomnienie tutaj, że powie Ci, jak:

http://blogs.msdn.com/adamroot/pages/shell-style-drag-and-drop-in-net-wpf-and-winforms.aspx

+3

nie powinno być żadnych COM współdziałanie niezbędne do wspierania przeciągnij-upuść w aplikacji, AFAIK (Uwaga * „na inną kontrolą (obraz kosza)” * –

+0

Wow @Cheeso. - że na pewno wygląda kompleks - może się przydać później w przypadku bardziej zaawansowanych efektów wizualnych –

+0

Ahh, Fredrik, masz rację! źle zinterpretowałem pytanie, współdziałanie COM jest konieczne tylko przy zintegrowanym z powłoką Przeciągnij/upuść Mój zły. post z notatką na ten temat – Cheeso

Powiązane problemy