Come ottenere ListViewItem sotto MouseCursor durante il trascinamento qc. sopra
-
22-09-2019 - |
Domanda
sto implementando il drag & drop su una ListView. Ho già riuscito ad ottenere il ListViewItem sotto il cursore quando far cadere su di essa, ma mi piacerebbe ottenere il ListViewItem sotto il cursore del mouse , mentre che sto trascinando qc. sopra il ListView-Control.
Vorrei selezionare il ListViewItem (selezionato = true) come in Windows Explorer quando si sta trascinando i file su una cartella.
Ho pensato a eventi come ItemMouseHover, MouseMove nella ListView, ma non sono licenziati durante il trascinamento qc. su di esso.
Spero che mi può aiutare ...
Saluti,
Inno
P.S .: Sto usando .Net2.0
Soluzione
Hai provato rispondere all'evento DragOver nella classe ListView? Si dovrebbe essere in grado di farlo in questo modo.
private void listBox_DragOver(object sender,
DragEventArgs e)
{
//for ListView
var point = listView.PointToClient(new Point(e.X, e.Y));
var item = listView.GetItemAt( point.X, point.Y);
if(item != null)
{
//do whatever - select it, etc
}
//or, for ListBox
var indexOfItem =
listBox.IndexFromPoint(listBox.PointToClient(new Point(e.X, e.Y)));
if (indexOfItem != ListBox.NoMatches)
{
//do whatever - select it, etc
}
}
Altri suggerimenti
Se si sta facendo il drag and drop in un ListView, si impara molto, cercando in codice di ObjectListView (un wrapper open source intorno NET WinForms ListView).
Se si utilizza un'ObjectListView al posto di un normale ListView, un sacco di cose, come il drag and drop, avviene automaticamente.