{
public class TabCollection : KeyedCollection<string, TabModel>
{
+ public int IndexOf(string tabName)
+ => this.IndexOf(this[tabName]);
+
public bool TryGetValue(string tabName, out TabModel tab)
=> this.Dictionary.TryGetValue(tabName, out tab);
}
}
+ public void ReplaceTab(TabModel tab)
+ {
+ if (!this.ContainsTab(tab.TabName))
+ throw new ArgumentOutOfRangeException(nameof(tab));
+
+ var index = this.Tabs.IndexOf(tab);
+ this.Tabs.RemoveAt(index);
+ this.Tabs.Insert(index, tab);
+ }
+
+ public void MoveTab(int newIndex, TabModel tab)
+ {
+ if (!this.ContainsTab(tab))
+ throw new ArgumentOutOfRangeException(nameof(tab));
+
+ this.Tabs.Remove(tab);
+ this.Tabs.Insert(newIndex, tab);
+ }
+
public bool ContainsTab(string TabText)
=> this.Tabs.Contains(TabText);
{
lock (this.LockObj)
{
+ var index = this.Tabs.IndexOf(Original);
var tb = this.Tabs[Original];
- this.Tabs.Remove(Original);
+ this.Tabs.RemoveAt(index);
tb.TabName = NewName;
- this.Tabs.Add(tb);
+ this.Tabs.Insert(index, tb);
}
}
using (ControlTransaction.Layout(this.ListTab))
{
- var mTp = this.ListTab.TabPages[targetIndex];
- this.ListTab.TabPages.Remove(mTp);
+ var tab = this._statuses.Tabs[targetIndex];
+ var tabPage = this.ListTab.TabPages[targetIndex];
+ this.ListTab.TabPages.Remove(tabPage);
if (targetIndex < baseIndex)
baseIndex--;
- if (isBeforeBaseTab)
- ListTab.TabPages.Insert(baseIndex, mTp);
- else
- ListTab.TabPages.Insert(baseIndex + 1, mTp);
+ if (!isBeforeBaseTab)
+ baseIndex++;
+
+ this._statuses.MoveTab(baseIndex, tab);
+ ListTab.TabPages.Insert(baseIndex, tabPage);
}
SaveConfigsTabs();
// 関連発言なら既存のタブを置き換える
tb.TabName = relatedTab.TabName;
this.ClearTab(tb.TabName, false);
- _statuses.Tabs.Remove(tb.TabName);
- _statuses.Tabs.Add(tb);
+
+ this._statuses.ReplaceTab(tb);
for (int i = 0; i < ListTab.TabPages.Count; i++)
{