11

のタブをプログラムで並べ替えるにはどうすればよいTabControlですか? いくつかの条件に応じてタブを並べ替える必要があります。

デザイナーを介して並べ替えを実行できる場合は、実行時にコードを介して実行できる必要があると思います。

4

7 に答える 7

11
  1. 新しいフォームを作成します。
  2. 新しい TabControl を作成します。
  3. 2 つの TabPage コントロールがあり、TabPage1 が最初のタブであることに注意してください。
  4. フォームの Load イベントで、追加します
    • this.TabControl1.TabPages.Remove(this.TabPage2)
    • this.TabControl1.TabPages.Insert(0, this.TabPage2)
  5. フォームを実行します。
  6. TabPage2 が最初のタブになっていることに注意してください。

タブ ページを削除しないと、元の場所に表示されることに注意してください。つまり、同じタブ ページに 2 つのタブが表示されます。

于 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) を持つタブ コントロールがあります。

次に、2 つのタブページを宣言し、既存のタブをタブ コントロールに格納します。

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

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 に答える
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 に答える
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 に答える