如何通过编程重新排序 TabControl
中的选项卡?我需要根据一些条件对选项卡进行排序。
如果可以通过设计器进行重新排序,那么我认为我们也应该能够在运行时通过代码实现它。
如何通过编程重新排序 TabControl
中的选项卡?我需要根据一些条件对选项卡进行排序。
如果可以通过设计器进行重新排序,那么我认为我们也应该能够在运行时通过代码实现它。
this.TabControl1.TabPages.Remove(this.TabPage2)
this.TabControl1.TabPages.Insert(0, this.TabPage2)
请注意,如果您未能删除选项卡页,则它仍将显示在其旧位置。换句话说,您将拥有相同选项卡页的两个选项卡。
public static void Sort(TabControl tabControl)
{
var tabList = tabControl.TabPages.Cast<TabPage>().ToList();
tabList.Sort(new TabPageComparer());
tabControl.TabPages.Clear();
tabControl.TabPages.AddRange(tabList.ToArray());
}
public class TabPageComparer : IComparer<TabPage>
{
public int Compare(TabPage x, TabPage y)
{
return string.Compare(x.Text, y.Text);
}
}
thelost是正确的。以下是一个快速的示例代码。
我有一个带有2个选项卡(tabpage1,tabpag2)的选项卡控件。
然后我声明两个选项卡并将现有选项卡存储在其中的选项卡控件中。
abPage tbp1 = new TabPage();
TabPage tbp2 = new TabPage();
tbp1 = tabControl1.TabPages[0];
tbp2 = tabControl1.TabPages[1];
然后,在按钮点击时,我使用以下方法删除了选项卡:
tabControl1.TabPages.Remove(tabControl1.TabPages[0]);
如果您想更改顺序,则需要按照该顺序将其添加到选项卡中。
//Order changed
tabControl1.TabPages.Add(tbp2);
tabControl1.TabPages.Add(tbp1);
this.tabReceive.Controls.Remove(this.metroTabPage4);
this.tabReceive.Controls.Remove(this.metroTabPage5);
this.tabReceive.Controls.Add(this.metroTabPage4);
this.tabReceive.Controls.Add(this.metroTabPage5);
进入Designer.cs文件
在那里你会找到
/// [Your TabControl Name]
yourTabControl.Controls.Add(yourPage1);
yourTabControl.Controls.Add(yourPage2);
yourTabControl.Controls.Add(yourPage3);
添加顺序是选项卡页在选项卡控件中的顺序。按照您的意愿更改顺序即可。TabControl.Controls 的删除和添加功能将像 Shoban 回答的那样帮助您。
public void ReorderTabPages()
{
// Demo code to reorder tabControl with tabPages
// where some tabPages may be unwanted at the moment
// caution: events like "SelectedIndexChanged" does fire!
// List of wanted tab pages
List<TabPage> wantedTabPages = new List<TabPage>();
// remember the current selected tab
TabPage currentTabPage = this.tabControl.SelectedTab;
// check if all possibly active tabs are currently visible
// check it in the order they should be displayed
// after that they are in the correct order in "wantedTabPages"
if (this.tabControl.TabPages.IndexOf(this.tabPage_01) >= 0)
wantedTabPages.Add(this.tabPage_01);
if (this.tabControl.TabPages.IndexOf(this.tabPage_02) >= 0)
wantedTabPages.Add(this.tabPage_02);
if (this.tabControl.TabPages.IndexOf(this.tabPage_03) >= 0)
wantedTabPages.Add(this.tabPage_03);
if (this.tabControl.TabPages.IndexOf(this.tabPage_04) >= 0)
wantedTabPages.Add(this.tabPage_04);
this.tabControl.SuspendLayout();
// remove all currently visible tab pages
for (int i = this.tabControl.TabPages.Count - 1; i >= 0; i--)
this.tabControl.TabPages.RemoveAt(i);
// add the tabPages in the correct order
foreach (var wantedPage in wantedTabPages)
this.tabControl.TabPages.Add(wantedPage);
// restore the currently selected tabPage
this.tabControl.SelectedTab = currentTabPage;
this.tabControl.ResumeLayout();
}