This code does works fine as long as all of the values in the list are completely unique. However if you have more than one item in the list with the same text you will get unexpected results as the item removed isn't always the item you selected it may be the other copy of the same text. I found this out the hard way and after stumbling around for a while I figured out that if there is a chance of duplicate text you should use the ListBox1.RemoveAt();.

Here is the complete code I used: (Similar approach as this article illustrates but slightly different.)

//remove item by index number since index number will always be unique.
ListBox1.Items.RemoveAt(iSelectedIndex);
//insert item with new index and orignal text .
ListBox1.Items.Insert(iNewIndex, sSelectedItem);