所以我需要动态添加和删除一些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());
行
我该怎么做?
答案 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;
}
}
}