以编程方式更改Tab键顺序

时间:2010-04-01 09:11:18

标签: c# winforms tabcontrol tabpage

如何以编程方式重新排序TabControl中的标签?我需要根据某些条件对选项卡进行排序。

如果可以通过设计师进行重新排序,我想我们必须能够在运行时通过代码来完成。

7 个答案:

答案 0 :(得分:9)

  1. 创建新表单。
  2. 创建一个新的TabControl。
  3. 请注意,它有两个TabPage控件,TabPage1是第一个选项卡。
  4. 在表单的Load事件中,添加
    • this.TabControl1.TabPages.Remove(this.TabPage2)
    • this.TabControl1.TabPages.Insert(0, this.TabPage2)
  5. 运行表单。
  6. 注意TabPage2现在是第一个标签。
  7. 请注意,如果您无法删除标签页,它仍将显示在旧位置。换句话说,您将有两个相同标签页的标签。

答案 1 :(得分:8)

您必须重新定义标签页集合,才能更改标签页的索引。

答案 2 :(得分:5)

最后是对的。以下是一个快速示例代码。

我有一个带有2个标签的标签控件(tabpage1,tabpag2)

然后我声明两个tabpages并将tabcontrol中的现有选项卡存储在其中。

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);

注意:这是未经测试的快速代码。

答案 3 :(得分:3)

以下代码行也可以做到这一点,这种解决方案也适用于没有直接排序方式的其他类型的数据: - 转换为列表 - 对列表进行排序 - 把它放回去

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);
    }
}

答案 4 :(得分:1)

进入Designer.cs文件

你会找到

/// [Your TabControl Name]
yourTabControl.Controls.Add(yourPage1);
yourTabControl.Controls.Add(yourPage2);
yourTabControl.Controls.Add(yourPage3);

添加顺序是tabcontrol中的tabpages顺序。按照您的意愿更改顺序。删除和添加TabControl.Controls的功能将帮助你作为Shoban回答。

答案 5 :(得分:1)

在Initilizacomponent()之后尝试这个。此代码将允许您自由地在.cs文件中以编程方式更改它。

        this.tabReceive.Controls.Remove(this.metroTabPage4);
        this.tabReceive.Controls.Remove(this.metroTabPage5);

        this.tabReceive.Controls.Add(this.metroTabPage4);
        this.tabReceive.Controls.Add(this.metroTabPage5);

答案 6 :(得分:0)

有时候我有tabControls和几个tabPages。在运行时,tabPages不可见(通过删除它们),稍后再添加。

此后tabPages的顺序可能不正确。我使用此代码重新排序它们:

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();
}