11

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

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

4

7 回答 7

11
  1. 创建一个新表格。
  2. 创建一个新的 TabControl。
  3. 请注意,它有两个 TabPage 控件,并且 TabPage1 是第一个选项卡。
  4. 在表单的 Load 事件中,添加
    • this.TabControl1.TabPages.Remove(this.TabPage2)
    • this.TabControl1.TabPages.Insert(0, this.TabPage2)
  5. 运行表格。
  6. 注意 TabPage2 现在是第一个选项卡。

请注意,如果您未能删除标签页,它仍将显示在其旧位置。换句话说,您将拥有同一个标签页的两个标签。

于 2010-04-01T09:32:45.683 回答
9

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

于 2010-04-01T09:14:51.937 回答
6

以下代码行也可以解决问题,这种解决方案也适用于其他没有直接排序方式的数据: - 转换为列表 - 对列表进行排序 - 将其放回

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);
    }
}
于 2015-02-03T22:28:35.183 回答
5

迷失是对的。下面是一个快速示例代码。

我有一个带有 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);

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

于 2010-04-01T09:33:12.027 回答
1

进入 Designer.cs 文件

在那里你会发现

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

添加顺序是您的标签页在选项卡控件中的顺序。更改您希望的顺序。正如 Shoban 的回答,TabControl.Controls 的删除和添加功能将为您提供帮助。

于 2012-03-30T08:28:34.373 回答
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);
于 2014-05-02T06:11:07.093 回答
0

有时我有几个 tabPages 的 tabControls。在运行时 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();
}
于 2016-03-28T09:45:38.347 回答