2012-01-27 52 views
1

我在运行时在流程面板中创建列表视图,稍后将接受拖放文件。原因是我想这些作为文件夹,所以用户双击并获得一个窗口显示内容。流动面板与列表视图

我在设置列表视图的事件时遇到困难,因为它们已添加。

如何为每个添加的listview动态创建一些事件(如MouseDoubleClick和DragDrop)?我可以为这两个事件创建一个单一的函数,并让listview1,listview2,listviewX使用它吗?

我有一个按钮,即添加listviews,它工作正常。请指教,我很抱歉,如果这太概念化,不够确切。

private void addNewWOButton_Click(object sender, EventArgs e) 
     { 
      ListView newListView = new ListView(); 
      newListView.AllowDrop = true; 
      flowPanel.Controls.Add(newListView); 
     } 

回答

1

你将不得不在你的代码已经创建的例程:

private void listView_DragDrop(object sender, DragEventArgs e) { 
    // do stuff 
} 

private void listView_DragEnter(object sender, DragEventArgs e) { 
    // do stuff 
} 

,然后在你的程序中,你的线材起来:

private void addNewWOButton_Click(object sender, EventArgs e) 
{ 
    ListView newListView = new ListView(); 
    newListView.AllowDrop = true; 
    newListView.DragDrop += listView_DragDrop; 
    newListView.DragEnter += listView_DragEnter; 

    flowPanel.Controls.Add(newListView); 
} 

你将不得不检查如果您需要知道哪个ListView控件正在触发事件,那么“发件人”是谁。

你也可以使用lambda功能简单的事情:

newListView.DragEnter += (s, de) => de.Effect = DragDropEffects.Copy; 
+0

明白了。从未在今天之前使用过发件人参数。我现在有。谢谢。 'code'ListView thisListView = sender as ListView; thisListView.Items.Add(file); – ikathegreat 2012-01-27 02:33:51

0

只需确保-=到无线化的事件,如果你还可以动态删除ListView秒。

要回答您的问题的另一半,您可以对任何具有处理程序签名的来源的事件使用单个处理程序。在处理程序的主体中,您只需检查sender参数即可确定哪个控件引发了该事件。

但是,您需要一种方法来告诉来自同一个班级的不同班级的一个控件。一种方法是确保在创建它时在每个控件上设置Name属性; 例如newListView.Name = "FilesListView"

然后,在您的事件处理程序中执行任何其他操作之前,请检查发件人。

private void listView_DragDrop(object sender, DragEventArgs e) { 
    ListView sendingListView = sender as ListView; 
    if(sendingListView == null) { 
     // Sender wasn't a ListView. (But bear in mind it could be any class of 
     // control that you've wired to this handler, so check those classes if 
     // need be.) 
     return; 
    } 
    switch(sendingListView.Name) { 
     case "FilesListView": 
      // do stuff for a dropped file 
      break; 
     case "TextListView": 
      // do stuff for dropped text 
      break; 
     ..... 
    } 
}  
+0

很好,谢谢。关于我在做什么好的事情,我不会允许用户动态删除(还)。他们将不得不等待2.0版本。 – ikathegreat 2012-01-27 02:36:13