The listbox is a little different from other controls. It doesn't allow for javascript to pick up the click event so a postback can't occur. So what happens is that the selectedindexchanged event is fired when the postback happens... whenever it does happen.
You can remove the item by generating javascript, yes.
On the page:
<script type="text/javascript">
function removethis(listboxid)
{
var lbx = document.getElementById(listboxid);
var selIndex = lbx.selectedIndex;
if (selIndex != -1)
{
for(i=lbx.length-1; i>=0; i--)
{
if(lbx.options[i].selected)
{
document.getElementById(document.getElementById('Hidden1').value).value = lbx.options[lbx.selectedIndex].value;
lbx.options[i] = null;
}
}
}
}
</script>
Code:
ListBox1.Attributes.Add("onclick", "removethis('" + ListBox1.ClientID + "');")