如何以编程方式重新排序TabControl
中的标签?我需要根据某些条件对选项卡进行排序。
如果可以通过设计师进行重新排序,我想我们必须能够在运行时通过代码来完成。
答案 0 :(得分:9)
this.TabControl1.TabPages.Remove(this.TabPage2)
this.TabControl1.TabPages.Insert(0, this.TabPage2)
请注意,如果您无法删除标签页,它仍将显示在旧位置。换句话说,您将有两个相同标签页的标签。
答案 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();
}