【问题标题】:C# ListView DragDrop Event Method Executing Twice Per DropC# ListView DragDrop 事件方法每次放置执行两次
【发布时间】:2010-01-16 00:55:36
【问题描述】:

该方法连续执行两次,并且没有明显的理由这样做。 它发生在 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();
    }
}

【问题讨论】:

  • 你确定InitializeComponent() 没有安装拖放处理程序吗?
  • 只是为了回应上面 J. Knoeller 的评论:打开 Designer.cs 文件并检查是否存在其他 DragEnter 和 DragDrop 处理程序。

标签: c# listview events drag-and-drop


【解决方案1】:

我在关注 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 2021-06-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多