Hi Tom,
Assuming you use MouseMove to get the X and Y, you can calculate which sub item is under the cursor by comparing X with the column widths.
Note, this will only work if FullRowSelect = true; or MouseMove won't trigger the event.
Some sample code from the MouseMove event, but you can easily store the position for later use by MouseHover
ListViewItem l = listView1.GetItemAt(e.X, e.Y);
if(e.X <= listView1.Columns[0].Width)
label1.Text = l.SubItems[0].Text;
else if(e.X <= (listView1.Columns[1].Width + listView1.Columns[0].Width))
label1.Text = l.SubItems[1].Text;
else if(e.X <= (listView1.Columns[2].Width + listView1.Columns[1].Width + listView1.Columns[0].Width))
label1.Text = l.SubItems[2].Text;
Happy coding!
Morten Wennevik [C# MVP]