Let me disclaimer this attempt at an answer by saying that I certainly do not regard myself as an expert on the WinForms native ListView, and I use a 3rd. Party ListView in my own code.
From my quick study, it appears that your code is not causing an error: however, the 'TopItem property does not, as you may be expecting, move the position of a ListViewItem within the ListView to the top of the ListView client display rectangle.
'TopItem' appears to me to have much the same effect as 'EnsureVisible' : it just makes it show up in the visible area of the ListView. Unfortunately, it appears to me that the WinForms ListView Control has no 'ScrollIntoView method, or other useful way to position a given ListViewItem exactly where you want it in the visible area of the ListView.
'Highlighting' is something you can easily simulate by just setting the BackColor, and/or selecting the matching ListViewItem found by searching with 'FindItemWithText.'
Now
if your intent is to actually MOVE the found ListViewItem to the top of the ListView: that can be done like this:
private void button1_Click(object sender, EventArgs e)
{
ListViewItem lv = listView1.FindItemWithText("AnyOldItem");
if(lv == null) return;
listView1.Items.Remove(lv);
listView1.Items.Insert(0, lv);
lv.BackColor = Color.Yellow;
lv.Selected = true;
}
Which I think is ... uhhh ... not very beautiful code :).
I hope someone else gives you a better solution !