Ane*_*eef 9 c# tabcontrol tabpage winforms
如何以编程方式重新排序选项卡TabControl
?我需要根据某些条件对选项卡进行排序.
如果可以通过设计器进行重新排序,我想我们必须能够在运行时通过代码来完成.
this.TabControl1.TabPages.Remove(this.TabPage2)
this.TabControl1.TabPages.Insert(0, this.TabPage2)
请注意,如果您无法删除标签页,它仍将显示在旧位置.换句话说,您将有两个相同标签页的标签.
小智 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)
这是最好的.以下是一个快速示例代码.
我有一个带有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)
注意:这是未经测试的快速代码.