以编程方式更改Tab键顺序

Ane*_*eef 9 c# tabcontrol tabpage winforms

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

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

AMi*_*ico 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现在是第一个选项卡.

请注意,如果您无法删除标签页,它仍将显示在旧位置.换句话说,您将有两个相同标签页的标签.


the*_*ost 8

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


小智 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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Sho*_*ban 5

这是最好的.以下是一个快速示例代码.

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

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

abPage tbp1 = new TabPage();
TabPage tbp2 = new TabPage();

tbp1 = tabControl1.TabPages[0];
tbp2 = tabControl1.TabPages[1];
Run Code Online (Sandbox Code Playgroud)

然后在按钮上单击我删除了标签

tabControl1.TabPages.Remove(tabControl1.TabPages[0]);
Run Code Online (Sandbox Code Playgroud)

现在,如果您想要更改订单,那么您将按顺序将其添加到选项卡中

//Order changed    
tabControl1.TabPages.Add(tbp2);
tabControl1.TabPages.Add(tbp1);
Run Code Online (Sandbox Code Playgroud)

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