Tabcontrol trop plein ? Onglet qui met une plombe à charger...

Tabcontrol trop plein ? Onglet qui met une plombe à charger... - C#/.NET managed - Programmation

Marsh Posté le 06-04-2006 à 22:28:25    

J'ai un tabControler avec dans un onglet un tableLayout que je remplis lors du lancement de l'application avec environ 250 label+textbox pour faire un gros formulaire (et NON je ne peux pas le faire plus petit).
 
L'application se lance sans probleme en un clin d'oeil, tout est généré sans probleme et tres rapidement. Par contre, lors du premier clic sur cet onglet precis, on peut VOIR reellement les champs se rajouter, ca prend bien 10 longues secondes avec CPU a 100% et appli paralysée...  
 
Je sais pas trop ce qu'il fait... Mais une fois cette premiere visualisation, je peux changer d'onglet et y revenir sans que ca soit lent...
 
Donc je comprends pas... J'ai vérifié, tout est bien généré "onload", et aucun code n'est executé pendant ces 10 secondes...  
 
Il se passe quoi ? Y'a moyen de regler ce probleme ? :heink:

Reply

Marsh Posté le 06-04-2006 à 22:28:25   

Reply

Marsh Posté le 07-04-2006 à 10:05:37    

je pense que ça vient coté framework.

Reply

Marsh Posté le 21-04-2006 à 13:38:16    

-VDV- a écrit :

J'ai un tabControler avec dans un onglet un tableLayout que je remplis lors du lancement de l'application avec environ 250 label+textbox pour faire un gros formulaire (et NON je ne peux pas le faire plus petit).
 
L'application se lance sans probleme en un clin d'oeil, tout est généré sans probleme et tres rapidement. Par contre, lors du premier clic sur cet onglet precis, on peut VOIR reellement les champs se rajouter, ca prend bien 10 longues secondes avec CPU a 100% et appli paralysée...  
 
Je sais pas trop ce qu'il fait... Mais une fois cette premiere visualisation, je peux changer d'onglet et y revenir sans que ca soit lent...
 
Donc je comprends pas... J'ai vérifié, tout est bien généré "onload", et aucun code n'est executé pendant ces 10 secondes...  
 
Il se passe quoi ? Y'a moyen de regler ce probleme ? :heink:


 
Regarde du côté de  
 
this.SuspendLayout()
this.ResumeLayout()
 
A mettre dans les évents qui se lancent quand tu accèdes à ton tabcontrol.
En effet, Windows va redessiner l'intégralité du contrôle chaque fois qu'un contrôle est ajouté. Ainsi, quand y'en a pas beaucoup, ça va vite, autant quand y'en a un max...
SuspendLayout() force Windows à ne pas redessiner ta form.

Message cité 1 fois
Message édité par Arjuna le 21-04-2006 à 13:38:48
Reply

Marsh Posté le 22-04-2006 à 02:13:55    

Arjuna a écrit :

Regarde du côté de  
 
this.SuspendLayout()
this.ResumeLayout()
 
A mettre dans les évents qui se lancent quand tu accèdes à ton tabcontrol.
En effet, Windows va redessiner l'intégralité du contrôle chaque fois qu'un contrôle est ajouté. Ainsi, quand y'en a pas beaucoup, ça va vite, autant quand y'en a un max...
SuspendLayout() force Windows à ne pas redessiner ta form.


 
La génération des controls se fait comme je l'ai dit, "onload" de l'application, donc bien avant de l'afficher. Bien evidement, la generation complete du formulaire est entre suspend/resumelayout (precision, j'ai meme un resumelayout(true) pour forcer la mise a jour du composant toujours "onload" )
 
C'est UNIQUEMENT en cliquant sur l'onglet, donc uniquement en affichant le formulaire généré bien avant, et uniquement a la premiere visualisation. Il n'y a AUCUN code executé. La seule explication, c'est qu'apparement il doit "charger" tout ca en ram, vu que meme si les controls sont crées, utilisables, et générés bien avant, au moment du clic sur cet onglet, l'application gonfle d'une 20aine de mega en ram ^^

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed