0

いくつかのイベントやボタンのクリックで閉じる必要があるいくつかのタブを実装するにはどうすればよいですか?

4

1 に答える 1

1

次のように、TabControl からタブを削除できます。

tabControl1.TabPages.Remove(tabControl1.SelectedTab);

複数のタブを閉じるときは、タブをポップするとタブ ページのインデックスが変化するため、最初にインデックス番号の大きいタブを削除することをお勧めします。

private void button1_Click(object sender, EventArgs e)
{
    // Close second and fourth tab
    if (tabControl1.TabPages.Count > 3)
    {
        // Work backwards when removing tabs
        tabControl1.TabPages.RemoveAt(3);
        tabControl1.TabPages.RemoveAt(1);
    }
}

タブを閉じた後に再びタブが必要になった場合は、Hide()役に立ちません。各タブの参照をメモリに保存し、後で追加または挿入する必要があります。

tabControl1.TabPages.Remove(tabPage1);
tabControl1.TabPages.Add(tabPage1);
tabControl1.TabPages.Insert(0, tabPage1);

以下の例を使用すると、閉じたタブのコレクションを保持し、後でそれらを TabControl にプッシュできます。できれば、タブへの位置と参照を保存できる小さなクラスを作成することをお勧めします。この例では、同じことを行うジェネリック List と Control.Tag を使用します。

private List<TabPage> tabsClosed = new List<TabPage>();

private void button1_Click(object sender, EventArgs e)
{
    // Close second and fourth tab
    if (tabControl1.TabCount > 3)
    {
        // Keep a reference to tabs in memory before closing them
        tabsClosed.Add(tabControl1.TabPages[1]);
        tabsClosed.Add(tabControl1.TabPages[3]);

        // Store the tabs position somewhere
        tabControl1.TabPages[1].Tag = 1;
        tabControl1.TabPages[3].Tag = 3;

        // Work backwards when removing tabs
        tabControl1.TabPages.RemoveAt(3);
        tabControl1.TabPages.RemoveAt(1);
    }
}

private void button2_Click(object sender, EventArgs e)
{
    foreach (TabPage tab in tabsClosed)
    {
        //tabControl1.Controls.Add(tab);
        tabControl1.TabPages.Insert((int)tab.Tag, tab);
    }
    tabsClosed.Clear();
}
于 2008-11-26T14:09:53.440 に答える