2017-05-16 7 views
0

J'ai donc besoin d'ajouter et de supprimer dynamiquement certains TabPage. L'utilisateur a cliqué sur "Afficher l'onglet" = storage_page ajouté.Supprimer TabPage de TabControl

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; 
} 

Et quand il choisit une autre page du storage_page doit être retiré

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; 
     } 
    } 
} 

Lorsque je clique sur la page « Afficher l'onglet » apparaît. Mais quand je choisis une autre page je vois le ArgumentOutOfRangeException menant à Application.Run(new Form_Authentication()); ligne

Comment puis-je faire cela?

Répondre

0

Je pense que le problème est que vous augmentez la variable i par 1 de 0 à main_tabControl.TabPages.Count

Je suppose que main_tabControl.TabPages.Count = 10, ce qui est si vous ne est venu enlever l'élément 7? À ce moment, main_tabControl.TabPages.Count = 4 et i variable = 6. Ainsi, la variable i dépasse la plage de TabPages.

Vous devez changer votre code:

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; 
     } 
    } 
}