Boucle for et indexation de variable

Boucle for et indexation de variable - C#/.NET managed - Programmation

Marsh Posté le 23-03-2006 à 17:55:23    

Bonjour,
 
J'ai dans mon programme plusieurs richtextbox (richtextbox1, richtextbox2...). Je souhaiterais faire une boucle for pour sauvegarder à la suite le contenu des richtextbox dans un fichier :  
 
    for (int i = 1; i <= 5; i++)
            richTextBox[i].SaveFile("c:\\rtb"[i]".sav" );  
 
Seulement voilà, je n'arrive pas à faire en sorte que le i variant puisse se "coller" au richtextbox--- et au c:\\rtb---.sav pour faire varier ces deux paramètres dans la boucle.  
 
Des idées ?
 
Merci !
 
 
               

Reply

Marsh Posté le 23-03-2006 à 17:55:23   

Reply

Marsh Posté le 23-03-2006 à 18:07:32    

Impossible tel quel.
 
 
 
solution brute:
 

Code :
  1. HashTable tbl = new HashTable();
  2. foreach(Constrol ctrl in this.Controls)
  3. {
  4.     if(ctrl is RichTextBox)
  5.     {
  6.         tbl.Add(ctrl.Name,ctrl);
  7.     }
  8. }
  9. for(int i=0; i< tbl.Count; i++)
  10. {
  11.     string counter = "RichTextBox"+i.ToString();
  12.     RichTextBox rtbEnCours = (RichTextBox) tbl[counter];
  13.    
  14.     if(rtbEnCours != null)
  15.         rtbEnCours.SaveFile(@"c:\rtb"+i.ToString()+".sav" );
  16. }


 
le tout entre try..catch... bien entendu
 
Sinon, plus classe, en utilisant la reflexion de C#, mais j'ai pas trop le temps d'expliquer la  :ange:  
 
Ou en utilisant les propriétés Tag des richtextbox, ou... Enfin, ce ne sont pas les solutions qui manque :D

Reply

Marsh Posté le 23-03-2006 à 18:17:54    

C'est quoi les proprriétés tag des richtexbox?

Reply

Marsh Posté le 23-03-2006 à 18:24:06    

Frolor a écrit :

C'est quoi les proprriétés tag des richtexbox?


 
C'est un champ de propriété commun a tous les Controles heritants de la classe Controle du framework, te permettant de stocker une variable de type object dedans, tu peux t'en servir par exemple pour y stocker le nom du fichier de sortie que tu desire et ensuite boucler de la sorte:
 
 
 

Code :
  1. RichTextBox1.Tag = "rtb1.sav";
  2. RichTextBox1.Tag = "rtb2.sav";
  3. RichTextBox1.Tag = "rtb3.sav";
  4. // et ainsi de suite...
  5. foreach(Constrol ctrl in this.Controls)
  6. {   
  7.     if(ctrl is RichTextBox && ctrl.Tag != null && ctrl.Tag is string)
  8.     {
  9.         ctrl.SaveFile(@"C:\"+Convert.ToString(ctrl.Tag));
  10.     }
  11. }

Reply

Marsh Posté le 23-03-2006 à 20:43:35    

pourquoi ne pas bêtemement récupérer les trois textes et les concaténer. Faut pas se chercher des complications quand il n'y en a pas. On en plus en C ou en C++ mais en .NET les gars ;-)

Reply

Marsh Posté le 23-03-2006 à 21:01:18    

z'avez le droit d'utiliser string.Format les mecs !

Reply

Marsh Posté le 23-03-2006 à 21:58:47    

moi23372 a écrit :

pourquoi ne pas bêtemement récupérer les trois textes et les concaténer. Faut pas se chercher des complications quand il n'y en a pas. On en plus en C ou en C++ mais en .NET les gars ;-)


 
 
Sauf que cela ne reponds pas à la question de base:
 
Sauvegarder en une boucle le texte de 3 richtextbox en 3 fichiers Distincts...
 
 

Reply

Marsh Posté le 24-03-2006 à 11:11:33    

Merci pour vos solutions mais ça ne marche pas :(
 
D'après les tests que j'ai fait, j'ai l'impression que ça bloque au niveau de cette ligne :  
 
RichTextBox rtbEnCours = (RichTextBox) tbl[counter];
 
le [counter] n'appelle pas la bonne case dans la hashtable, du coup rtbencours reste vide...
 
Des idées?

Reply

Marsh Posté le 24-03-2006 à 11:39:00    

Frolor a écrit :

Merci pour vos solutions mais ça ne marche pas :(
 
D'après les tests que j'ai fait, j'ai l'impression que ça bloque au niveau de cette ligne :  
 
RichTextBox rtbEnCours = (RichTextBox) tbl[counter];
 
le [counter] n'appelle pas la bonne case dans la hashtable, du coup rtbencours reste vide...
 
Des idées?


 
 
Remplacer:
 

Code :
  1. string counter = "RichTextBox"+i.ToString();


 
par
 

Code :
  1. string counter = "richtextbox"+i.ToString();


 
Bref, il faut être rigoureu sur la valeur de la clé que tu mets dans la hashtable (respecte bien la casse des caracteres)

Reply

Marsh Posté le 30-03-2006 à 18:39:57    

Merci ixemul, ta première solution marche !  
 
(oui bon je sais c'est un peu tard pour te remercier, mais ce n'est que maintenant que j'arrive à faire marcher ton code ;) )

Reply

Marsh Posté le 30-03-2006 à 18:39:57   

Reply

Marsh Posté le 04-07-2006 à 19:27:01    

Bonjours à tous je viens vous demande votre aides, car j'ai un petit problème alors voilà j'ai une richtext box et j'aissaye de récupérer les espaces mais impossible voilà un exemple:
 
Soit la richtextbox Texte1
 
soit le texte suivant dans cette Richtextbox :"ceci est un test!"
 
Si je fais Texte1.Text[5] logiquement j'ai " " sauf que là ça me renvoie "e" et Texte1.Text[4] renvoie "i"! Ma question est comment récupérer les espaces??? merci d'avance.


Message édité par burn2 le 04-07-2006 à 19:31:46

---------------
"C'est vrai qu'un type aussi pénible de jour on serait en droit d'espérer qu'il fasse un break de nuit mais bon …"
Reply

Marsh Posté le 04-07-2006 à 19:47:48    

que dois tu fais exactement. Si c'est récupéré les mots séparément dans des variables:
string[] mots = Texte1.Text.Split(' '); //split à peut etre deux paramètres
 
sinon tu peux utiliser indexof/lastindexof/... pour retrouver tes espaces.  
 
Je suis assez étonné de la réaction que tu racontes du RichTextBox, faudrait que j'essaye une fois...

Reply

Marsh Posté le 04-07-2006 à 19:52:06    

Bon je retire ce que j'ai dis! Je viens de trouver, par contre si j'ai un char et que je fais char.equals(" " ) ça ne marche pas pour le comparer à un espace! On fait comment pour dire char e==" " ?
 
 
EDIT: trouvé ' ' au lieux de " "  :sleep:  Je suis vraiment fatigué moi!


Message édité par burn2 le 04-07-2006 à 19:57:43

---------------
"C'est vrai qu'un type aussi pénible de jour on serait en droit d'espérer qu'il fasse un break de nuit mais bon …"
Reply

Marsh Posté le 12-07-2006 à 11:21:34    

Char.IsWhiteSpace(mychar)

Reply

Marsh Posté le 12-07-2006 à 12:09:42    

non mais il suffisait que je remplace les "" par des quotes, "" c'est pour des string pas des chars :D


---------------
"C'est vrai qu'un type aussi pénible de jour on serait en droit d'espérer qu'il fasse un break de nuit mais bon …"
Reply

Marsh Posté le 12-07-2006 à 12:18:47    

burn2 a écrit :

non mais ...

Comment ça 'non' ? Si si, j'insiste. Char.IsWhiteSpace() ça fonctionne. C'est même un peu plus rapide que e == ' ', car ça évite une vérification de type. (Bon ok, ça se ressent que si on le fait 1000000000 fois de suite) :)

Reply

Marsh Posté le 12-07-2006 à 16:05:00    

Lol c'était juste pour dire que dans mon cas suffisait juste de faire ça cependant si ta methode est plus rapide je l'adopterais alors :o


---------------
"C'est vrai qu'un type aussi pénible de jour on serait en droit d'espérer qu'il fasse un break de nuit mais bon …"
Reply

Sujets relatifs:

Leave a Replay

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