【问题标题】:Remove TabPage from TabControl从 TabControl 中删除 TabPage
【发布时间】:2017-05-16 13:56:18
【问题描述】:

所以我需要动态添加和删除一些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;
        }
   }
}

当我单击“显示选项卡”时,页面会显示出来。但是当我选择其他页面时,我看到ArgumentOutOfRangeException 导致Application.Run(new Form_Authentication());

我该怎么做?

【问题讨论】:

    标签: c# .net tabs tabpage


    【解决方案1】:

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

    我假设 main_tabControl.TabPages.Count = 10,如果您要删除第 7 个元素会发生什么?此时main_tabControl.TabPages.Count = 4,i variable = 6。所以,i variable超出了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;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多