public bool RemoveSpecifiedTab(string TabName, bool confirm)
{
var tabInfo = _statuses.GetTabByName(TabName);
if (tabInfo.IsDefaultTabType || tabInfo.Protected) return false;
if (confirm)
{
string tmp = string.Format(Properties.Resources.RemoveSpecifiedTabText1, Environment.NewLine);
if (MessageBox.Show(tmp, TabName + " " + Properties.Resources.RemoveSpecifiedTabText2,
MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Cancel)
{
return false;
}
}
var _tabPage = ListTab.TabPages.Cast<TabPage>().FirstOrDefault(tp => tp.Text == TabName);
if (_tabPage == null) return false;
SetListProperty(); //他のタブに列幅等を反映
//オブジェクトインスタンスの削除
DetailsListView _listCustom = (DetailsListView)_tabPage.Tag;
_tabPage.Tag = null;
using (ControlTransaction.Layout(this.SplitContainer1.Panel1, false))
using (ControlTransaction.Layout(this.SplitContainer1.Panel2, false))
using (ControlTransaction.Layout(this.SplitContainer1, false))
using (ControlTransaction.Layout(this.ListTab, false))
using (ControlTransaction.Layout(this))
using (ControlTransaction.Layout(_tabPage, false))
{
if (this.ListTab.SelectedTab == _tabPage)
{
this.ListTab.SelectTab((this._beforeSelectedTab != null && this.ListTab.TabPages.Contains(this._beforeSelectedTab)) ? this._beforeSelectedTab : this.ListTab.TabPages[0]);
this._beforeSelectedTab = null;
}
this.ListTab.Controls.Remove(_tabPage);
// 後付けのコントロールを破棄
if (tabInfo.TabType == MyCommon.TabUsageType.UserTimeline || tabInfo.TabType == MyCommon.TabUsageType.Lists)
{
using (Control label = _tabPage.Controls["labelUser"])
{
_tabPage.Controls.Remove(label);
}
}
else if (tabInfo.TabType == MyCommon.TabUsageType.PublicSearch)
{
using (Control pnl = _tabPage.Controls["panelSearch"])
{
pnl.Enter -= SearchControls_Enter;
pnl.Leave -= SearchControls_Leave;
_tabPage.Controls.Remove(pnl);
foreach (Control ctrl in pnl.Controls)
{
if (ctrl.Name == "buttonSearch")
{
ctrl.Click -= SearchButton_Click;
}
else if (ctrl.Name == "comboSearch")
{
ctrl.KeyDown -= SearchComboBox_KeyDown;
}
pnl.Controls.Remove(ctrl);
ctrl.Dispose();
}
}
}
_tabPage.Controls.Remove(_listCustom);
_listCustom.SelectedIndexChanged -= MyList_SelectedIndexChanged;
_listCustom.MouseDoubleClick -= MyList_MouseDoubleClick;
_listCustom.ColumnClick -= MyList_ColumnClick;
_listCustom.DrawColumnHeader -= MyList_DrawColumnHeader;
_listCustom.DragDrop -= TweenMain_DragDrop;
_listCustom.DragEnter -= TweenMain_DragEnter;
_listCustom.DragOver -= TweenMain_DragOver;
_listCustom.DrawItem -= MyList_DrawItem;
_listCustom.MouseClick -= MyList_MouseClick;
_listCustom.ColumnReordered -= MyList_ColumnReordered;
_listCustom.ColumnWidthChanged -= MyList_ColumnWidthChanged;
_listCustom.CacheVirtualItems -= MyList_CacheVirtualItems;
_listCustom.RetrieveVirtualItem -= MyList_RetrieveVirtualItem;
_listCustom.DrawSubItem -= MyList_DrawSubItem;
_listCustom.HScrolled -= MyList_HScrolled;
var cols = _listCustom.Columns.Cast<ColumnHeader>().ToList<ColumnHeader>();
_listCustom.Columns.Clear();
cols.ForEach(col => col.Dispose());
cols.Clear();
_listCustom.ContextMenuStrip = null;
_listCustom.ColumnHeaderContextMenuStrip = null;
_listCustom.Font = null;
_listCustom.SmallImageList = null;
_listCustom.ListViewItemSorter = null;
//キャッシュのクリア
if (_curTab.Equals(_tabPage))
{
_curTab = null;
_curItemIndex = -1;
_curList = null;
_curPost = null;
}
this.PurgeListViewItemCache();
}
_tabPage.Dispose();
_listCustom.Dispose();
_statuses.RemoveTab(TabName);
foreach (TabPage tp in ListTab.TabPages)
{
DetailsListView lst = (DetailsListView)tp.Tag;
var count = _statuses.Tabs[tp.Text].AllCount;
lst.VirtualListSize = count;
}
return true;
}