Просто убедитесь, что события не связаны с -=
, если вы также удаляете 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;
.....
}
}