从TabControl

时间:2017-05-16 13:56:19

标签: c# .net tabs tabpage

所以我需要动态添加和删除一些TabPage。用户点击"显示标签" = storage_page已添加。

private void storage_menuItem_Click(object sender, EventArgs e) {
    storage_page.Text = storage_page.Name = "Storage";
    main_tabControl.TabPages.Add(storage_page);
    main_tabControl.SelectedTab = storage_page;
}

当他选择另一页时,必须删除storage_page

private void main_tabControl_SelectedIndexChanged(object sender, EventArgs e) {
    for (int i = 0; i < main_tabControl.TabPages.Count; i++) {
        if (main_tabControl.TabPages[i].Name.Equals("storage", StringComparison.OrdinalIgnoreCase) && main_tabControl.SelectedTab.Name != "Storage") {
            main_tabControl.TabPages.RemoveAt(i);
            break;
        }
   }
}

当我点击&#34;显示标签&#34;页面显示。但是当我选择其他页面时,我会看到ArgumentOutOfRangeException导致Application.Run(new Form_Authentication());

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我认为问题是你将i变量从0增加到1到main_tabControl.TabPages.Count

我假设main_tabControl.TabPages.Count = 10,如果你要删除第7个元素会发生什么?那时,main_tabControl.TabPages.Count = 4,i变量= 6.因此,i变量超出了TabPages的范围。

你应该改变你的代码:

private void main_tabControl_SelectedIndexChanged(object sender, EventArgs e) {
    for (int i = main_tabControl.TabPages.Count - 1; i >=0 ; i--) {
        if (main_tabControl.TabPages[i].Name.Equals("storage", StringComparison.OrdinalIgnoreCase) && main_tabControl.SelectedTab.Name != "Storage") {
            main_tabControl.TabPages[i].Dispose();
            break;
        }
    }
}
相关问题