如何以编程方式重新排序 a 中的选项卡TabControl
?我需要根据某些条件对选项卡进行排序。
如果可以通过设计器进行重新排序,我想我们也必须能够在运行时通过代码来完成。
如何以编程方式重新排序 a 中的选项卡TabControl
?我需要根据某些条件对选项卡进行排序。
如果可以通过设计器进行重新排序,我想我们也必须能够在运行时通过代码来完成。
this.TabControl1.TabPages.Remove(this.TabPage2)
this.TabControl1.TabPages.Insert(0, this.TabPage2)
请注意,如果您未能删除标签页,它仍将显示在其旧位置。换句话说,您将拥有同一个标签页的两个标签。
您必须重新定义标签页集合,才能更改标签页的索引。
以下代码行也可以解决问题,这种解决方案也适用于其他没有直接排序方式的数据: - 转换为列表 - 对列表进行排序 - 将其放回
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);
}
}
迷失是对的。下面是一个快速示例代码。
我有一个带有 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);
注意:这是未经测试的快速代码。
进入 Designer.cs 文件
在那里你会发现
/// [Your TabControl Name]
yourTabControl.Controls.Add(yourPage1);
yourTabControl.Controls.Add(yourPage2);
yourTabControl.Controls.Add(yourPage3);
添加顺序是您的标签页在选项卡控件中的顺序。更改您希望的顺序。正如 Shoban 的回答,TabControl.Controls 的删除和添加功能将为您提供帮助。
在 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);
有时我有几个 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();
}