2010-11-24 8 views
4

J'ai un onglet-contrôle qui a 4 pages à onglets. Chaque page à onglet contient un contrôle utilisateur que j'ajoute par programmation lors du premier chargement du programme. Pour une raison quelconque, la deuxième page de l'onglet se charge lentement lorsque je clique dessus, mais les autres onglets se chargent bien. Cette page à onglet contient environ 20 contrôles (zones de texte, listes déroulantes, zones de liste, etc) mais pas d'images ou quelque chose comme ça. Aussi cette page a environ le même nombre de contrôles que les autres. Y a-t-il un moyen d'accélérer la commutation des onglets? Puis-je précharger l'onglet-page au démarrage?Windows Form Tabulation charge lentement

Remarque: Il est seulement lent sur le commutateur initial.

Voici comment ajouter le Usercontrol

tabPage2.Controls.Add(userControl_1); 
     // 
     // userControl_1 
     // 
     userControl_1.Anchor = ((AnchorStyles.Top | AnchorStyles.Bottom) 
            | AnchorStyles.Left) 
           | AnchorStyles.Right; 
     userControl_1.Location = new System.Drawing.Point(0, 0); 
     userControl_1.Name = "userControl_1"; 
     userControl_1.Size = new System.Drawing.Size(878, 646); 
     userControl_1.TabIndex = 0; 
+0

Avez-vous essayé 'userControl_1.Dock = Dockstyle.Fill 'au lieu de tous ces paramètres de taille et d'ancrage? –

+0

Essayé que, mais il n'a pas rendu le contrôle correct au fond, n'a pas non plus fixé la lenteur. – Gage

+0

Il est presque * jamais * le chargement qui est lent (à moins que databound), c'est le * peinture * qui le fait paraître lent. –

Répondre

1

Ceci est une caractéristique de la TabControl: Le contenu d'un onglet sont chargés uniquement clique dessus pour la première fois.

Il semblerait donc être un problème de ce UC sur la 2ème page, recherchez les ressources (requêtes) qu'il utilise.

+0

Cela dit, j'utilise Nhibernate et lorsque je clique sur l'onglet, il ne montre aucune requête en cours d'exécution dans Nhibernate Profiler. – Gage

+0

Ensuite, cherchez quelque chose d'autre qui pourrait le ralentir. –

+0

J'ai cherché tout ce que je peux penser, c'est pourquoi je demande ici. Theres aucun moyen de précharger les onglets que vous connaissez? – Gage

1

Appellez SuspendLayout et ResumeLayout avant et après avoir chargé tous les contrôles.

Comme si

UserControlName.SuspendLayout(); 

//Load all of the controls 

UserControlName.ResumeLayout(); 

Cela entraînera à ne pas tirer quoi que ce soit jusqu'à ce qu'il ait initialisé tous les contrôles que vous essayez de charger.

+0

Oui, je suis réellement. Je l'ai commenté mais il y a encore un décalage entre quand ils cliquent sur l'onglet et quand il est affiché. 3-4s. Serait-ce une chose LINQ peut-être? Cela montre que tout est chargé au démarrage. LINQ peut-il retarder comme ça? – Gage

+0

@Gage oui, c'est l'un des principaux points de LINQ. Il ne charge rien jusqu'à ce que vous accédiez aux données dans la requête – msarchet

Questions connexes