C# TableLayoutPanel retirer des controls

Fermé
Utilisateur anonyme - Modifié le 25 mars 2017 à 11:37
sensa6on Messages postés 130 Date d'inscription vendredi 19 octobre 2012 Statut Membre Dernière intervention 26 octobre 2018 - 18 avril 2017 à 16:59
Bonjour

Je suis en train de faire un logiciel WinForms en C#, et j'ai un tableau qui doit afficher des éléments. Le problème, c'est que quand je veux retirer des éléments pour actualiser ce tableau, je n'ai pas trouvé de méthode efficace.
Il y a:
table.Controls.Remove(table.GetControlFromPosition(x, y));

Mais cette méthode semble très longue, et prend plusieurs secondes, et plus quand il y a plus de controls. Donc pour actualiser mon tableau, voir les labels disparaitre un par un ce n'est pas terrible. Quelqu'un a une solution?
Merci d'avance

4 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
Modifié le 26 mars 2017 à 14:38
Bonjour

comment choisis tu quel contrôle supprimer?

Edit: quand tu les ajoutes leur donnes tu un nom?

Quand j'étais petit, la mer Morte n'était que malade.
George Burns
0
Utilisateur anonyme
26 mars 2017 à 17:48
Bonjour, merci pour ta réponse
Je les retrouve grace à
table.GetControlFromPosition(x, y)

je pense que c'est cette opération qui prend beaucoup de temps
Non, je ne leur donne pas de nom ils sont créés dans mon code
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
26 mars 2017 à 17:55
je n'ai pas dû être assez explicite, que tu trouves le contrôle à supprimer avec la méthode GetControlFromPosition, tu l'as déjà écrit, ce que je voudrais savoir c'est comment tu détermines quel x et quel y supprimer.

Pour le nom, tu peux leur en donner même par le code.
0
Utilisateur anonyme
Modifié le 26 mars 2017 à 19:16
J'ai une boucle for pour l'y et une pour l'x. En fait je veux supprimer tous les controls de mon tableau sauf ceux de la première ligne. Et oui je sais que je peux leur donner un nom par le code

Ce n'est pas un très grand tableau (4 * 20) donc ça ne devrait pas être le problème
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
26 mars 2017 à 21:04
As tu essayé avec RemoveAt ? de l'index 4 à 19?
Sinon, tu copies les 4 premiers labels dans un tableau de label, tu fais un Clear et tu remets les 4 sauvegardés.
0
Utilisateur anonyme > Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024
Modifié le 28 mars 2017 à 21:11
Bonjour
Non ça ne marche pas mieux, mais il me semble que j'ai mal identifié le problème, j'ai l'impression qu'il y a une latence à chaque fois que le tableau s'actualise. Quand je le redimentionne j'ai ce même problème, peut être que ça vient du calcul des pourcentages que doit occuper chaque case.
En tout cas merci pour ta réponse. Pour ce nouveau problème je créée une nouvelle question?
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
28 mars 2017 à 23:34
Non, ça reste dans le même thème.
Comment charges tu le panel et calcules tu tes pourcentages?
0
Utilisateur anonyme
29 mars 2017 à 11:54
Je place le panel dans l'éditeur, et les colonnes et lignes aussi. Le pourcentage est directement proposé par le panel quand je les place, j'ai trois modes qui sont "Absolute" (en pixels), "Percent" que j'utilise et "AutoSize". Ce n'est donc pas moi qui ait codé ce système de pourcentage
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
29 mars 2017 à 12:13
Poste le code
0
sensa6on Messages postés 130 Date d'inscription vendredi 19 octobre 2012 Statut Membre Dernière intervention 26 octobre 2018 78
18 avril 2017 à 16:59
Je ne sais pas exactement ce que tu cherches à faire mais tu peux essayer avec la méthode Dispose()

foreach (Control ctrl in tablelayoutpanel.controls)
{
if (ctrl is Label)
ctrl.dispose();
}
0