2012-01-27 53 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