のタブをプログラムで並べ替えるにはどうすればよいTabControl
ですか? いくつかの条件に応じてタブを並べ替える必要があります。
デザイナーを介して並べ替えを実行できる場合は、実行時にコードを介して実行できる必要があると思います。
のタブをプログラムで並べ替えるにはどうすればよいTabControl
ですか? いくつかの条件に応じてタブを並べ替える必要があります。
デザイナーを介して並べ替えを実行できる場合は、実行時にコードを介して実行できる必要があると思います。
this.TabControl1.TabPages.Remove(this.TabPage2)
this.TabControl1.TabPages.Insert(0, this.TabPage2)
タブ ページを削除しないと、元の場所に表示されることに注意してください。つまり、同じタブ ページに 2 つのタブが表示されます。
タブ ページのインデックスを変更するには、タブ ページ コレクションを再定義する必要があります。
次のコード行でもこのトリックを実行できます。この種のソリューションは、直接ソートする方法がない他の種類のデータにも機能します: - リストに変換 - リストをソート - 元に戻す
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) を持つタブ コントロールがあります。
次に、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);
注: これはテストされていないクイック コードです。
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);
Designer.cs ファイル内に移動
そこにあなたが見つけるでしょう
/// [Your TabControl Name]
yourTabControl.Controls.Add(yourPage1);
yourTabControl.Controls.Add(yourPage2);
yourTabControl.Controls.Add(yourPage3);
追加順序は、タブコントロール内のタブページの順序です。順序はお好みで変更してください。Shobanが答えたように、TabControl.Controlsの削除および追加機能が役立ちます。
時々、複数の 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();
}