2012-08-23 3 views
1

J'ai un TabControl qui commence par trois TabPages. Sur le premier onglet, il y a un NumericUpDown (spinner) qui affiche le nombre d'onglets et permet à un utilisateur d'ajouter jusqu'à 10 onglets supplémentaires. Une fois qu'ils ajoutent plus d'environ 5 ou 6, il dépasse la largeur du formulaire et le reste des onglets est accessible par quelques flèches gauche/droite en haut. En allant tout à fait vers la droite, puis en utilisant la roulette pour redescendre à 0 (en supprimant tous les onglets supplémentaires et en laissant les trois premiers), elle supprime tous les onglets du haut du volet et seulement en remettant la roulette à 1 Est-ce qu'il rafraîchit et affiche tous les 4 (3 à partir du début, plus 1 à partir du spinner). J'ai essayé plusieurs commbinations de Application.DoEvents() this.Refresh() this.Invalidate() this.Update() , mais rien ne semble fonctionner. Quelqu'un peut-il suggérer une raison pour laquelle il n'est pas mise à jour/rafraîchissante?tabcontrol non rafraîchissant

public partial class Form1 : Form 
{ 

TabPage[] tabs; 

    public Form1() 
    { 
     InitializeComponent(); 
     tabs = new TabPage[tabControl1.Controls.Count]; 
     tabs[0] = tabPage1; 
    } 

    private void numericUpDown1_ValueChanged(object sender, EventArgs e) 
    { 
     int numTabs = tabControl1.Controls.Count; 
     decimal spinnerValue = numericUpDown1.Value; 

     if (numTabs < spinnerValue) //add a tab 
     { 
      TabPage[] newTabs = new TabPage[(int)spinnerValue]; 
      for (int i = 0; i < numTabs; i++) 
      { 
       newTabs[i] = tabs[i]; 
      } 

      TabPage tab = new TabPage("Tab " + numTabs); 
      newTabs[(int)spinnerValue-1] = tab; 
      tabControl1.Controls.Add(tab); 
      tabs = newTabs; 
     } 
     else //remove a tab 
     { 
      TabPage[] newTabs = new TabPage[(int)spinnerValue]; 
      for (int i = 0; i < spinnerValue; i++) 
      { 
       newTabs[i] = tabs[i]; 
      } 
      tabControl1.Controls.Remove(tabs[(int)spinnerValue]); 
      tabs = newTabs; 
     } 
    } 
} 
+0

À quoi ressemble votre code? semble que vous avez 2 questions l'un d'eux étant SelectedIndex problème et les autres DoEvents() ne l'utilisent pas .. peut-être vous pouvez regarder BeginInvoke si (tabControl1.SelectedIndex == 1) { this.BeginInvoke (nouvelle Action (() => tabControl1.SelectTab (0))); – MethodMan

+0

pourquoi y aurait-il un problème selectedindex? – user1584120

+0

Je prends un coup dans le noir sans aucun code pour voir comment vous faites les choses ... il est difficile pour quiconque de donner une réponse concrète .. Je suggérerais de poster du code – MethodMan

Répondre

1

Sans voir tout code ou de savoir quel type de projet est ce WinForms, WPF, ASP.NET etc .. il est difficile de donner une réponse définitive, je vais supposer que ce WinForms

Je ne suis pas sûr si vous le pouvez. Ce qui suit est une citation de MSDN:

"Les contrôles contenus dans un TabPage ne sont pas créés jusqu'à ce que la page à onglets soit affichée, et les liaisons de données dans ces contrôles ne sont pas activées tant que la page à onglets n'est pas affichée." Cependant, au lieu de demander directement au code de mise à jour les valeurs des contrôles, vous pourriez peut-être créer une classe qui pourrait contenir les données que vous utilisez pour remplir les contrôles, puis, lorsque le code de mise à jour demande à la classe la valeur et la classe vérifient si le contrôle est chargé et sinon il obtient la valeur des données à la place.

+0

comment puis-je savoir quel type de projet c'est? – user1584120

+0

bien est-ce une application web par exemple avez-vous un fichier .aspx? Si oui, c'est un projet ASP.NET .. poster un code que vous utilisez et je suis sûr que si vous mettez dans la bonne définition de classe, nous pouvons vous dire quel type de projet que vous utilisez .. Honnêtement, je ne peux pas croire que vous ne savez pas quel type de projet vous utilisez .. – MethodMan

+1

désolé nouveau à C# .... ceci est une application de formulaires. ive répliqué dans une petite application de test: – user1584120

Questions connexes