Bonsoir, comme l'explique le titre, j'aurai besoin d'un système capable d'ajouter des données issues de plusieurs CheckBox cochées (en fait quand on coche un CheckBox, cela doit inscrire une donnée à la suite sur une même ligne).
Exemple : Si CheckBox1, CheckBox2, et CheckBox3, etc... sont cochées,
A une ligne, inscrire : Valeur de CheckBox1, valeur de CheckBox2, valeur de CheckBox3, etc...
A noter qu'un membre du forum m'a déjà fourni un système semblable mais qui cette fois inscrit ligne par ligne, là je dois inscrire les données sur une des lignes de ce système en plus.
Un grand merci d'avance à celui qui pourra m'aider dans cette tâche, j'ai déjà essayé de reproduire le système précédent (avec des Tags) pour celui-ci, j'obtiens des résultats mais pas ceux qui m'importent.
AppendLine mets un retour à la ligne... Essaye ceci
Constructeur.Append(string.Format(" {0}= ", c.Tag));//tu vas écrire " Option = " sans retour à la ligne
ensuite
if (checkBox21.Checked == true)//si tu n'as qu'une instruction avec un if, les accolades ne sont pas obligatoires
Constructeur.Append("ALLOW_ROCK_TARGET ");//ajoute simplement la consigne à la dernier ligne
if (checkBox22.Checked == true)
Constructeur.AppendLine("ALLOW_SHRUBBERY_TARGET ");
if (checkBox23.Checked == true)
Constructeur.AppendLine("CANCELABLE ");
//à ce moment là quelque soit la combinaison cochée il y a un espace en trop à la fin, donc on l'enlève:
Constructeur.Remove(str.Length - 1, 1);//si il y a 50 caractères, les indices vont de 0 à 49, donc on enlève l'indice 49
Je n'ai pas essayé mais ça doit se rapprocher de ce que tu souhaites.
On aurait aussi pu passer avec une List<string> et un string.Join
StringBuilder Constructeur = new StringBuilder();
List<string> options = new List<string>();//initialise une liste de string
if (checkBox21.Checked == true) options.Add("ALLOW_ROCK_TARGET");// ajoute une option si besoin
if (checkBox22.Checked == true)options.Add("ALLOW_SHRUBBERY_TARGET");
if (checkBox23.Checked == true)options.Add("CANCELABLE");
string mesOptions = string.Join(" ",options);//concatène avec des espaces en séparation
Constructeur.AppendLine(string.Format(" {0}= {1}", c.Tag, mesOptions));//là je mest ma ligne complète dans le stringbuilder
Par contre le choix de Constructeur comme nom de variable n'est pas judicieux.
En effet ce terme désigne, la méthode qui est appelée au moment de l'initialisation d'une instance de classe.
Par exemple:
public Form4()
{
InitializeComponent();
}
est le constructeur de Form4.
Ça peut prêter à confusion, surtout quand tu poses une question sur le forum, les autres bénévoles qui n'ont pas suivi les précédentes conversations peuvent être déroutés
Merci beaucoup, ça marche parfaitement, en effet il y a des techniques que je ne connais pas, je n'avais vraiment pas pensé à un List<string> et string.Join. Je ne sais pas comment tu fais pour connaitre autant de techniques et savoir laquelle utiliser, enfin, tu es peut-être dans le métier aussi. En tout cas merci beaucoup, les deux aides que tu m'a apporté étaient selon moi les plus dures, j'ai presque fini le logiciel que je voulais faire, je n'oublierai pas de noter l'aide que vous m'avez apporté le forum et toi-même, dans un formulaire "A propos". Il ne me reste plus qu'à alimenter les ComboBox sous base de données, mais ça je pense y arriver j'ai une méthode fonctionnelle. Voilà, merci beaucoup Whismeril. :)
Au fait, un if( ) va évaluer que ce qui est dans la parenthèse est un bool qui vaut soit true soit false.
Par exemple
if (toto == tutu)
c'est le résultat de == qui est évalué.
Quand ce que l'on veut tester est un déjà bool, comme la propriété Checked, il n'y a pas besoin de le comparer avec ==.
if (checkBox22.Checked == true)
//peut s'écrire
if (checkBox22.Checked)
//de même
if (checkBox22.Checked == false)
//peut s'écrire
if (!checkBox22.Checked)
Je pense même que ça s'exécute plus vite puisqu'il y a une opération en moins
Ah merci pour cette astuce Whismeril, je savais qu'on pouvait raccourcir une condition si elle était vrai, je l'ai appris en cours, mais je connais pas le principe avec le point d'exclamation. Niveau rapidité ça va, c'est pas un logiciel extrêmement compliqué que j'ai fait, mais ma foi si on peut toujours obtenir un gain de vitesse ou de taille de fichier, je suis preneur. Merci de tout l'aide que tu as pu m'apporter et que tu pourras m'apporter si j'ai encore des difficultés. :)
Bonjour, le principe est exactement le même.
Il te suffit d'écrire une méthode qui retourne un string.
Cette méthode gérera tes checkbox de la même façon que pour la derniere question.
Si tu n'en as que trois, tu peux le faire avec des if.
Sinon mets les dans un groupbox, ou mets un truc en commun dans le nom de façon à pouvoir faire la requête de sélection avec la méthode Contains().
Tu construis ton string du même principe que précédemment. Et tu le retourne de façon à ce qu'il intègre la construction générale.
Attend, oubli l'ancien message, je viens d'essayer autre chose, ça ne correspond pas à mes attentes non plus, mais peut-être que je suis sur la bonne voie, tu me dira, je viens d'essayer ceci :
- Quand je coche le CheckBox4, j'ai bien la ligne "Options = " qui s'affiche, mais elle est vide et c'est normal puisque je n'ai pas encore coché les options correspondantes.
- Quand je coche le CheckBox21, j'ai bien une inscription qui se réalise, mais il m'ajoute une ligne en dessous de l'autre déjà existante, or ce n'est pas ce que je recherche, mais je touche au but, il me faudrait juste une correction je pense.
- Pareil quand je coche CheckBox22...
Voilà le résultat si je coche les CheckBox21, CheckBox22, et CheckBox23 :
Modifié par Whismeril le 30/01/2014 à 15:45
En effet ce terme désigne, la méthode qui est appelée au moment de l'initialisation d'une instance de classe.
Par exemple:
est le constructeur de Form4.
Ça peut prêter à confusion, surtout quand tu poses une question sur le forum, les autres bénévoles qui n'ont pas suivi les précédentes conversations peuvent être déroutés
30 janv. 2014 à 18:09
30 janv. 2014 à 18:11
Par exemple
c'est le résultat de == qui est évalué.
Quand ce que l'on veut tester est un déjà bool, comme la propriété Checked, il n'y a pas besoin de le comparer avec ==.
Je pense même que ça s'exécute plus vite puisqu'il y a une opération en moins
30 janv. 2014 à 18:16
1 févr. 2014 à 22:57