Lecture seule, variable en C# WinForm [Résolu/Fermé]

Signaler
Messages postés
553
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
-
Messages postés
553
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
-
Bonjour,

Je suis en train de réaliser un générateur aléatoire de nombre pour les keys d'un logiciel que j'ai codé et je n'arrive pas à générer cela:

private void monBouton_Click(object sender, EventArgs e)    
        {    
            for (i = 0; i <= 29; i++) /*Boucle de génération du code qui fait 29 caract.*/    
            {    
                if (i == 5 || i == 12 || i == 18 || i == 25) /*Si le code arrive à 5, 12, etc. chiffres, il met un tiret (séparation du code) à la position i    
                {    
                    str_Code[i] = '-'; /*Il insère le tiret*/    
                }    
                else    
                {    
                    str_Code[i] = Convert.ToChar(Base.Next(10)); /*Autrement il génère un chiffre aléatoire à la position i*/    
                }    
            }    
        }


Je réponds volontiers à toute question et merci d'avance pour laide!



Meilleures salutations
damiens1026

4 réponses

Messages postés
6553
Date d'inscription
vendredi 28 décembre 2007
Statut
Contributeur
Dernière intervention
23 octobre 2020
432
En fait, quand tu fais str_Code[i], tu essaies d'accéder/modifier une case d'un tableau qui n'existe pas encore dans str_Code au lieu de la créer, donc à un endroit de la mémoire qui n'appartient pas encore à ton programme (endroit qui est logiquement en lecture seule).

Si tu fais str_Code += "lachaine", là tu demandes explicitement à AJOUTER et non accéder/remplacer les valeurs du tableau. Apparemment en c#, ce serait le seul moyen.

De plus pour ton code, tu demandes bien à ajouter une lettre à chaque fois dans ta boucle. Donc ça revient au même.

Voilà j'espère que tout va fonctionner pour toi.
Musicalement,
DJ Fire-Bl@ck.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
6553
Date d'inscription
vendredi 28 décembre 2007
Statut
Contributeur
Dernière intervention
23 octobre 2020
432
Oui.
Exemple :

string sText = "Il me manque ";  
sText += "un";  
sText += " mot ?";


à la fin sText contiendra :

'Il me manque un mot ?'


Voilà.

N'oublies pas de vérifier ta boucle for aussi. Il me semble que tu veux 29 caractères, or la boucle va exécuter ses instructions 30 fois. Donc il faut mettre i = 1, ou alors i < 29 au lieu de i <= 29.
Messages postés
799
Date d'inscription
dimanche 19 juin 2011
Statut
Membre
Dernière intervention
3 juillet 2018
132
Sinon une méthode peut-être plus élégante serait de boucler 5 fois la génération de 4 caractères aléatoires et l'ajout d'un tiret...
Messages postés
6553
Date d'inscription
vendredi 28 décembre 2007
Statut
Contributeur
Dernière intervention
23 octobre 2020
432
Parfaitement d'accord.
On pourrait même tout faire d'une ligne. ;)
Messages postés
553
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
32
Je vais essayer la +=... :)
Messages postés
553
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
32
Ce qui marche très bien aussi c'est
for (i = 0; i < 25; i++) 
     { 
          dbl_Code = (dbl_Code*10) + Base.Next(10); 
     }
puis après lors de l'affiche, l'insertion des tirets...
Messages postés
6553
Date d'inscription
vendredi 28 décembre 2007
Statut
Contributeur
Dernière intervention
23 octobre 2020
432
Salut,

Tu as des erreurs ou non ?

Déjà il me semble que :

 for (i = 0; i <= 29; i++)


Devrait être :

 for (int i = 0; i <= 29; i++)


Ensuite, tu devrais nous guider un peu plus pour savoir ce qui cloche.

Edit : Ensuite, je ne sais pas si ce sera fonctionnel, tu devrais tester après.
Quand tu veux ajouter une lettre à str_Code, faire str_Code += ...

Musicalement,
DJ Fire-Bl@ck.
Messages postés
553
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
32
Alors en fait, toutes mes variables sont déclarées plus haut dans le code...
        string str_Code;  
        Random Base = new Random();  
        int i;

Ensuite, il me dit que "La propriété ou l'indexeur 'string.this[int]' ne peut pas être assigné -- il est en lecture seule"
Meilleures salutations
damiens1026
Messages postés
553
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
32
J'avais déjà fait pareil en assignant l'endroit dans la string où il devait écrire, mais ça avait marché...
Messages postés
6553
Date d'inscription
vendredi 28 décembre 2007
Statut
Contributeur
Dernière intervention
23 octobre 2020
432
Messages postés
553
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
32
Bon, alors réussis:
        private void btn_Generer_Click(object sender, EventArgs e)  
        {  

            for (i = 0; i < 29; i++)  
            {  
                if (i == 4 || i == 11 || i == 17 || i == 24)  
                {  
                    str_Code += "-";  
                }  
                else  
                {  
                    {  
                        str_Code += Convert.ToString(Base.Next(10));  
                    }  
                }  
            }  
        }


Merci messieurs!
Meilleures salutations
damiens1026
Messages postés
6553
Date d'inscription
vendredi 28 décembre 2007
Statut
Contributeur
Dernière intervention
23 octobre 2020
432
J'ai l'impression qu'il y a des accolades en trop pour le bloc else ...

;)
Messages postés
553
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
32
je ne crois pas, une ferme le else, l'autre le for et après de le private...
Messages postés
6553
Date d'inscription
vendredi 28 décembre 2007
Statut
Contributeur
Dernière intervention
23 octobre 2020
432
                else  
                {  
                    {  
                        str_Code += Convert.ToString(Base.Next(10));  
                    }  
                }  


-->>

                else  
                {  
                        str_Code += Convert.ToString(Base.Next(10));  
                }  


Nan ? :o
Messages postés
553
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
32
ah, oui en effet, c'est juste! J'avais même pas vu!
Messages postés
553
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
32
Merci