2010-01-16 7 views
6

Die Methode wird zweimal hintereinander ausgeführt und es gibt keinen ersichtlichen Grund dafür. Es passiert in VS2010 Express (4.0) und in VS2008 (3.5).C# ListView DragDrop-Ereignis Methode zweimal pro Fall ausführen

public GUI() 
{ 
    InitializeComponent(); 
    this.lvwFiles.DragDrop += new System.Windows.Forms.DragEventHandler(this.lvwFiles_DragDrop); 
    this.lvwFiles.DragEnter += new System.Windows.Forms.DragEventHandler(this.lvwFiles_DragEnter); 
} 
private void lvwFilesAdd(string path, string[] paths) 
{ ... } 
private void lvwFilesWrite() 
{ ... } 
private void lvwFiles_DragEnter(object sender, DragEventArgs e) 
{ 
    if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
     e.Effect = DragDropEffects.Copy; 
    else 
     e.Effect = DragDropEffects.None; 
} 
private void lvwFiles_DragDrop(object sender, DragEventArgs e) 
{ 
    if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
    { 
     var paths = (string[])e.Data.GetData(DataFormats.FileDrop); 
     var path = Path.GetDirectoryName(paths[0]); 
     lvwFilesAdd(path, paths); 
     lvwFilesWrite(); 
    } 
} 
+3

Sind Sie sicher, dass 'InitializeComponent()' keinen Dragdrop-Handler installiert? –

+1

Um den obigen Kommentar von J. Knoeller zu wiederholen: Öffnen Sie die Datei Designer.cs und prüfen Sie, ob zusätzliche DragEnter- und DragDrop-Handler vorhanden sind. – BillW

+0

Ok, hab es geschafft, danke! – OIO

Antwort

4

ich folgend Microsoft Beispiel und bemerken nicht, dass die Erklärungen in GUI.Designer.cs (automatisch, von IDE) und in GUI.cs (manuell, vom Beispiel) redundant sind.

=== GUI.cs === 
public GUI() 
{ 
    InitializeComponent(); 
    this.lvwFiles.DragDrop += new System.Windows.Forms.DragEventHandler(this.lvwFiles_DragDrop); 
    this.lvwFiles.DragEnter += new System.Windows.Forms.DragEventHandler(this.lvwFiles_DragEnter); 
} 

=== GUI.Designer.cs === 
// 
// lvwFiles 
// 
... 
this.lvwFiles.DragDrop += new System.Windows.Forms.DragEventHandler(this.lvwFiles_DragDrop); 
this.lvwFiles.DragEnter += new System.Windows.Forms.DragEventHandler(this.lvwFiles_DragEnter);