private void reloadPak()
{
int topIdx = 0;
try
{
int idx = lstPakContents.SelectedItems[0].Index;
lstPakContents.BeginUpdate();
//try to preserve the top item
topIdx = lstPakContents.TopItem.Index; //can return null
//clear items without as much flicker as Items.Clear
for (int i = lstPakContents.Items.Count - 1; i >= 0; i--)
lstPakContents.Items.RemoveAt(i);
btnLoadPak_Click(this, new EventArgs());
if (idx >= lstPakContents.Items.Count)
idx = lstPakContents.Items.Count - 1;
if (topIdx >= lstPakContents.Items.Count)
topIdx = lstPakContents.Items.Count - 1;
lstPakContents.Items[idx].Selected = true;
lstPakContents.TopItem = lstPakContents.Items[topIdx];
lstPakContents.TopItem = lstPakContents.Items[topIdx]; //crazy, but stops the wrong item being set.
}
finally
{
lstPakContents.EndUpdate();
}
}