Concaténer des textes

Résolu
Messages postés
3
Date d'inscription
jeudi 2 décembre 2021
Statut
Membre
Dernière intervention
12 décembre 2021
-
Messages postés
2528
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
22 janvier 2022
-
Bonjour, tout le monde

je veux concaténer tous les textes des contrôles d'un panel et afficher le résultat dans un MessageBox
voici mon code :
foreach (Control c in panel1.Controls)
{
string sep = " ";
string[] p1 = { c.Text.ToString() };
string Str = string.Join(sep, p1);
MessageBox.Show(Str);
}

mais il ne m'affiche que le texte d'un seul control à la fois et ne les concatène pas
de l'aide SVP et merci à vous !!

5 réponses

Messages postés
16736
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022
583
Bonjour

Pour poster un code merci de suivre ce petit tuto
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Concernant ton problème, ce que tu as écrit fait ceci
  • tu prends le premier élément de la collection de contrôles
  • tu fais pleins de trucs dessus
  • tu affiches un message
  • tu prends le second élément de la collection de contrôles
  • tu fais pleins de trucs dessus
  • tu affiches un message
  • tu prends le 3me élément de la collection de contrôles
  • tu fais pleins de trucs dessus
  • tu affiches un message
  • etc….


Puisque la démarche ne correspond pas à ton besoin, je m’interroge si tu ne fais pas l’erreur de la majorité des autodidactes (moi aussi en mon temps) à savoir te lancer bille en tête dans ton projet, sans apprendre les bases.
Et bien figure toi ça ne marche pas.
Là tu te retrouves bloqué sur un truc simple, qu’en sera t il quand ça deviendra compliqué?

Je peux te donner une la solution à ton problème mais est ce que ça va vraiment t’aider si tu ne prends pas conscience des lacunes qui t’ont conduit à ce code?

Le meilleur conseil que je puisse te donner est de mettez ton projet de côté quelques jours le temps de suivre un cours en ligne. Celui de Tahé par exemple https://tahe.developpez.com/dotnet/csharp/
A l’issue y’a des chances que tu saches résoudre seul ton problème et si ça n’est pas le cas on pourra s’appuyer sur le socle que tu auras reçu pour te faire comprendre ce qui ne va pas.
Bonjour Whismen
Oui c'est vrai ce que tu dis, j'ai appris beaucoup de choses mais en les appliquant c'est une autre chose et merci pour le lien du site de Mr Joachim Tahé .
tu m'as signalé mon erreur et c'est déjà bien et je vais m y mettre et je te tiendrais au courant
Merci
Messages postés
2528
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
22 janvier 2022
143
Bonjour
Non seulement qu'il y a certaines lacunes au niveau de la programmation en C# ( un bonjour à Whismeril en passant ) en plus l'algorithme est complètement faux !
Je te montre le tien en bon français

1) Boucle pour chaque contrôle
2)_____Ma chaine est vide
3)_____Je prends la contenu Text du contrôle
4)_____Je le concatène à ma chaine
5)_____J'affiche le résultat dans MessageBox
6) Fin de boucle

Fais cet exemple à la main avec un crayon et un papier sur 3 contrôles contenant comme texte :
"Bonjour"
" les"
" gars !"
et tu verras ton erreur ( attention les 2 dernières chaines comportent un espace au début ) .
Le résultat devrait être "Bonjour les gars !"
Pour que l'algorithme soit correct il y a 2 lignes à déplacer ( la 2 et la 5 ) mais je ne te dis pas où les mettre !

Bonjour vb95
Merci pour le conseil
Quand je le fais je te fais signe
Messages postés
3
Date d'inscription
jeudi 2 décembre 2021
Statut
Membre
Dernière intervention
12 décembre 2021

Bonjour tout le monde
J'ai pu résoudre le problème précédent comme ceci :
<gras>List<string> Str01 = new List<string>();
{
foreach (Control c in panel1.Controls)
{
string T= c.Text.ToString();
Str01.Add(T);
}
string sep = " ";
string Str = string.Join(sep,Str01);
MessageBox.Show(Str.ToString());
};

Qu'en pensez-vous ou y a t'il une manière plus subtile ?
Merci pour vos commentaires
Messages postés
2528
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
22 janvier 2022
143
Bonjour
Whismeril t'a demandé de suivre un tuto pour déposer un code : chose que tu n'as pas fait ou pas su faire .
Par contre pour ton code il y a mieux
1) Pourquoi déclarer
string T
dans ta boucle
2) Pourquoi déclarer
 string sep = " "
à moins que tu t'en serves ensuite dans la même procédure .
3) Mettre
c.Text.ToString()
est inutile . La propriété Text d'un contrôle est déjà de type string .
4) En renommant Str01 en ListStr on sait ce que cette variable signifie : une liste de String

List<string> ListStr = new List<string>();
foreach (Control c in panel1.Controls)
{
     ListStr.Add(c.Text);
}
MessageBox.Show(string.Join(" ", ListStr);


Et vu que le boucle foreach ne comporte qu'une ligne en interne on peut même supprimer les accolades

List<string> ListStr = new List<string>();
foreach (Control c in panel1.Controls)
     ListStr.Add(c.Text);
MessageBox.Show(string.Join(" ", ListStr);

Messages postés
3
Date d'inscription
jeudi 2 décembre 2021
Statut
Membre
Dernière intervention
12 décembre 2021

Merci pour les conseils
Si je suis les cours de Tahé comme l'a suggéré Whismeril et justement en arrivant aux boucles j'ai corrigé pas mal d'erreurs que je commettais .
Je suis nouveau dans la programmation et c'est pour cela que j'essaye d'être beaucoup plus explicite en codant afin de ne pas perdre le fil !
mais ça vient en forgeant.
Messages postés
2528
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
22 janvier 2022
143 >
Messages postés
3
Date d'inscription
jeudi 2 décembre 2021
Statut
Membre
Dernière intervention
12 décembre 2021

Bonsoir
Si le sujet vous semble résolu veuillez clôturer celui avec le bouton adéquat !

Bonne continuation dans la programmation
Merci
Messages postés
16736
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022
583
Bonjour à vous

@VB
certes TaharSaid n'a pas utilisé la coloration syntaxique dans le message, mais il semble avoir mis à profit le conseil d'apprendre les bases et de revenir à son problème car cette fois l'algorithme écrit correspond à son besoin. Tes remarques sont constructives puisque cela simplifie le code et réduit notablement le temps d'exécution de l'algorithme.

@TaharSaid
On peut encore faire autrement, avec Linq. Le cours de Tahé ne l'aborde pas, c'est pour cela que je te montre et te conseille de t'y pencher, c'est un outil très puissant.

Ecriture 1, dite "spagethi"
var LesTextes = (from c in panel1.Controls
                              select c.Text);
MessageBox.Show(string.Join(" ", LesTextes);

Qui équivaut à
MessageBox.Show(string.Join(" ", (from c in panel1.Controls
                                                               select c.Text));


Ecriture 2, en ligne
MessageBox.Show(string.Join(" ", panel1.Controls.Select(c => c.Text)));


Dans les 2 cas la requête n'est rééllement exécutée qu'au moment du MessageBox. C'est dû à l'exécution différée des requêtes Linq. C'est un des points forts de Linq mais aussi un piège quand on n'y fait pas attention.

Voici un tuto qui fait le tour de cet outils
https://webman.developpez.com/articles/dotnet/introlinqtoobjects/