Метод события C # ListView DragDrop, выполняемый дважды за каплю - PullRequest
6 голосов
/ 16 января 2010

Метод выполняется два раза подряд, и для этого нет очевидных причин. Это происходит в VS2010 Express (4.0) и в VS2008 (3.5).

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();
    }
}

1 Ответ

4 голосов
/ 16 января 2010

Я следовал примеру Microsoft и не заметил, что объявления в GUI.Designer.cs (автоматический, IDE) и в GUI.cs (ручной, из примера) являются избыточными.

=== 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...