You can use LINQ to re-apply the original order. It can be done in two steps 1. project your ListBox's items to Dictionary using Select (there's an overload which'll give you the index) 2. Match your selected items against indexed collection and then sort them by the index.
here's some backing code:
var items = new[] { "A", "B", "C", "D" }; // your original items source
var selectedItems = new[] { "D", "C" }; // selection in any order
var indexedItems = items.Select((item, index) => new KeyValuePair<int, string>(index, item)); // indexed items
selectedItems = selectedItems.OrderBy(t => indexedItems.Single(t2 => t2.Value == t).Key).ToArray(); // selected items in the right order
MessageBox.Show(selectedItems[0]);