public override void Remove(Control value)
{
bool change_index = false;
TabPage page = value as TabPage;
if (page != null && owner.Controls.Contains(page))
{
int index = owner.IndexForTabPage(page);
if (index < owner.SelectedIndex || owner.SelectedIndex == Count - 1)
{
change_index = true;
}
}
base.Remove(value);
owner.m_helper.Remove(page);
// We don't want to raise SelectedIndexChanged until after we
// have removed from the collection, so TabCount will be
// correct for the user.
if (change_index && Count > 0)
{
// Clear the selected index internally, to avoid trying to access the previous
// selected tab when setting the new one - this is what .net seems to do
int prev_selected_index = owner.SelectedIndex;
owner.selected_index = -1;
owner.SelectedIndex = --prev_selected_index;
owner.Invalidate();
}
else if (change_index)
{
owner.selected_index = -1;
owner.OnSelectedIndexChanged(EventArgs.Empty);
owner.Invalidate();
}
else
{
owner.Redraw();
}
}