Changement d'état en C#

Résolu/Fermé
julow Messages postés 2198 Date d'inscription dimanche 26 août 2007 Statut Membre Dernière intervention 7 juillet 2015 - 29 avril 2008 à 22:00
xavave Messages postés 24 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 1 mai 2012 - 30 avril 2008 à 09:22
Salut!!
Je développe un programme en C# et je désire faire quelque chose que je ne connais pas. ET du coup je bloque...

J'ai un groupbox avec dedans 4 radiobutton. Je désire créer un SI qui aurais comme condition un changement d'état de l'un d'entre eux... Comment faire?

Merci à tous et à bientot!!
A voir également:

4 réponses

xavave Messages postés 24 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 1 mai 2012 6
30 avril 2008 à 09:22
pense a marquer le sujet comme etant resolu ;-)
voila donc ma reponse, que je t'ai fournie par email, si d'autres internautes sont interessés
c'est brouillon, on peut faire beaucoup mieux, mais j'ai fait ca tard dans la nuit, et bon, ca marche :-)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace TP_AP
{

public partial class Form1 : Form
{
const int nbdeQuestions = 5;
int questionCourante, score, nbdeParties;
string[] Tquestion = new string[nbdeQuestions];
string[] Treponse = new string[nbdeQuestions];
//les booléens peuvent prendre seulement 2 valeurs: soit vrai (true en anglais), soit faux (false en anglais)
//(c'est le cas pour tous les booléens,au cas ou tu ne connaitrais pas)
bool cat1OK = false, cat2OK = false, cat3OK = false, cat4OK = false,cat5OK=false;



public Form1()
{
InitializeComponent();

//la on va dans la fonction ctrlEnable en positionnant la variable a false
ctrlEnable(false);
initCtrl(string.Empty);
nbdeParties = 0;
score = 0;
rdcinema.Click += new EventHandler(rdcinema_Click);
rdjeux.Click += new EventHandler(rdjeux_Click);
rdmusique.Click += new EventHandler(rdmusique_Click);
rdstargate.Click += new EventHandler(rdstargate_Click);
rdtuning.Click += new EventHandler(rdtuning_Click);
}

/// <summary>
/// suivant la valeur (true ou false) qu'on indique quand on appelle cette méthode, les paramètres enabled enabled des boutons
///btnsuivant, btnVrai, et btnFaux vont prendre , réciproquement, la valeur true, ou false.
/// </summary>
/// <param name="etat"></param>
private void ctrlEnable(bool etat)
{
btnSuivant.Enabled = etat;
btnVrai.Enabled = etat;
btnFaux.Enabled = etat;

}


void rdstargate_Click(object sender, EventArgs e)
{

//je me sers des variables cat1OK, cat2OK,cat3OK,... de cette manière:
//la premiere fois qu'on clique sur un radiobouton, cat1OK est à false, comme defini en debut de programme
// en mettant un point d'exclamation devant le cat1OK ci dessous, ca veut dire, en clair et en francais

//SI (non Cat1OK) alors ...

//autrement dit SI CAT1OK= false alors ...

initCtrl(string.Empty);
if (!cat1OK)
//j'aurais pu ecrire if (cat1OK==false), dans la ligne au dessus, c'est exactement pareil au niveau du resultat que je cherchais
{
ctrlEnable(true);

chargeQuestions("starquestion.txt", "starreponse.txt");
}
// la je passe cat1OK à true, donc à vrai , en francais ;-)
//ca va impliquer que la prochaine fois qu'on clique sur ce bouton, comme CAT1OK est a vrai,
// on ne va pas "rentrer" dans le SI (puisque qu'il faut que cat1OK soit faux pour rentrer dedans)

//les variables cat[nombre]OK me permettent donc d'empecher le joueur de rentrer plus d'une fois dans chacun des questionnaires
//puisqu'après un passage dans le SI, le booléen change d'état - en passant a vrai - et donc la condition du SI n'est plus remplie

cat1OK=true;
}

void rdmusique_Click(object sender, EventArgs e)
{
if (!cat2OK)
{
ctrlEnable(true);
chargeQuestions("musquestion.txt", "musreponse.txt");
}
cat2OK=true;
}

void rdjeux_Click(object sender, EventArgs e)
{
if (!cat3OK)
{
ctrlEnable(true);
chargeQuestions("jeuxquestion.txt", "jeuxreponse.txt");
}
cat3OK = true;
}
void rdcinema_Click(object sender, EventArgs e)
{
if (!cat4OK)
{
ctrlEnable(true);
chargeQuestions("cinequestion.txt", "cinereponse.txt");
}
cat4OK=true;
}
void rdtuning_Click(object sender, EventArgs e)
{ if (!cat5OK)
{
ctrlEnable(true);
chargeQuestions("tunquestion.txt", "tunreponse.txt");
}
cat5OK = true;
}


void reponse_ButtonClicked(object sender, EventArgs e)
{
string reponse;
reponse = ((Button)sender).Text;
if (reponse == Treponse[questionCourante])
{
pictureBox1.Image = Image.FromFile(Environment.CurrentDirectory + @"\happy.JPG");
score++;
lblScore.Text = score + " / 5";
}
else
{
pictureBox1.Image = Image.FromFile(Environment.CurrentDirectory + @"\sad.JPG");
}
btnVrai.Enabled = false;
btnFaux.Enabled = false;
string msg = "";
if (questionCourante == nbdeQuestions - 1)
{
switch (score)
{
case 0: msg = "nul!"; break;
case 1: msg = "pas terrible!"; break;
case 2: msg = "peu mieux faire!"; break;
case 3: msg = "pas mal!"; break;
case 4: msg = "presque parfait!"; break;
case 5: msg = "parfait!"; break;
default: msg = "oula ca doit bugguer"; break;
}
MessageBox.Show(msg);
}
}

public void btnSuivant_Click(object sender, EventArgs e)
{
if (questionCourante < nbdeQuestions - 1)
{
ctrlEnable(true);

questionCourante++;
grbQuestion.Text = "Question N°" + (questionCourante+1) + " sur " + nbdeQuestions;
lblQuestion.Text = Tquestion[questionCourante];
pictureBox1.Image = null;

}
else
{
nbdeParties++;
MessageBox.Show("Vous avez parcouru toutes les questions; score final: " + score);
ctrlEnable(false);
questionCourante = 0;
initCtrl(string.Empty);

}
}

private void initCtrl(string initstr)
{
lblQuestion.Text = initstr;
grbQuestion.Text = initstr;
lblQuestion.Text = initstr;
}

public void chargeQuestions(string question, string reponse)
{
System.IO.StreamReader Fquestion;
System.IO.StreamReader Freponse;
int compteur = 0;
try
{
Fquestion = new System.IO.StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + @"\" + question);
Freponse = new System.IO.StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + @"\" + reponse);


question = Fquestion.ReadLine();
reponse = Freponse.ReadLine();
while (question != null)
{
Tquestion[compteur] = question;
question = Fquestion.ReadLine();
compteur++;
}
compteur = 0;
while (reponse != null)
{
Treponse[compteur] = reponse;
reponse = Freponse.ReadLine();
compteur++;
}
lblQuestion.Text = Tquestion[0];
lblScore.Text = score + " / 5";
grbQuestion.Text = "Question N°" + compteur;
questionCourante = 0;
question = null;
reponse = null;
}
catch (IOException ioe)
{
MessageBox.Show(ioe.Message);
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
}



private void btnQuitter_Click(object sender, EventArgs e)
{
this.Close();
}

private void btnVrai_Click(object sender, EventArgs e)
{
btnSuivant.Enabled = true;
reponse_ButtonClicked(sender, e);
}

private void btnFaux_Click(object sender, EventArgs e)
{
btnSuivant.Enabled = true;
reponse_ButtonClicked(sender, e);
}
}

}
1
un exemple simple:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace testRadioButton
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
radioButton1.CheckedChanged += new EventHandler(radioButton1_CheckedChanged);
radioButton2.CheckedChanged += new EventHandler(radioButton2_CheckedChanged);
}

void radioButton2_CheckedChanged(object sender, EventArgs e)
{
Form1.ActiveForm.BackColor = Color.Red;

}

void radioButton1_CheckedChanged(object sender, EventArgs e)
{
Form1.ActiveForm.BackColor = Color.AliceBlue;

}
}
}
0
julow Messages postés 2198 Date d'inscription dimanche 26 août 2007 Statut Membre Dernière intervention 7 juillet 2015 244
29 avril 2008 à 22:18
Merci de ton aide xavave, peux tu m'expliquer avec précision les lignes :

radioButton1.CheckedChanged += new EventHandler(radioButton1_CheckedChanged);
radioButton2.CheckedChanged += new EventHandler(radioButton2_CheckedChanged);

s'il te plait?
0
xavave Messages postés 24 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 1 mai 2012 6 > julow Messages postés 2198 Date d'inscription dimanche 26 août 2007 Statut Membre Dernière intervention 7 juillet 2015
29 avril 2008 à 22:31
oui,
exemple

crées un radiobutton
ensuite, tape dans le code de ton form, comme dans mon exemple:

radiobutton.CheckedChanged+= et la tu appuies 2 fois sur la touche TABULATION de ton clavier, ca te crée automatiquement la structure de ce gestionnaire d'évênement (en anglais: event handler)

cet evenement reagit quand le bouton change d'état
il y a plein d'evenements dans le meme genre

pour plus d'infos regarde cet article interessant:
https://freddyboy.developpez.com/dotnet/articles/events/
0
julow Messages postés 2198 Date d'inscription dimanche 26 août 2007 Statut Membre Dernière intervention 7 juillet 2015 244 > xavave Messages postés 24 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 1 mai 2012
29 avril 2008 à 22:37
Etant donné que je dois finir ce projet pour demain, je vais te déranger encore une fois afin d'avancer plus vite si tu veux bien.
Le fait de changer le statut d'un bouton va donc déclencher un event (ici le EventHandler...)
Donc dans mon IF comment dois je faire pour l'utiliser?
0
xavave Messages postés 24 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 1 mai 2012 6 > julow Messages postés 2198 Date d'inscription dimanche 26 août 2007 Statut Membre Dernière intervention 7 juillet 2015
29 avril 2008 à 22:46
montre moi ton code en détail parce que j'ai besoin de voir ce que tu as fait
0
julow Messages postés 2198 Date d'inscription dimanche 26 août 2007 Statut Membre Dernière intervention 7 juillet 2015 244
29 avril 2008 à 22:54
Bien, c'est un jeux de question reponse. Mon AP pour demain en fait...

Je souhaite que au lancement du programme l'utilisateur choisisse une catégorie de question vian les radio button. Donc au changement d'état d'un de mes bouton, je dois charger un autre fichier de question.
Donc mon IF doit etre :

Si (changement d'état d'un de mes bouton)
alors -> on regarde c'est lequel grace à accessible description) et on charge le fichier approprié
sinon -> on ne fait rien et on continue l'exe du programme (donc pas de siono)
Fsi

cela me donne :

if (condition que je recherche)
{
a = fctboutonradio; <-- fonction qui ramène le numéro du bouton radio
switch (a)
{
case 1:
{
System.IO.StreamReader Fquestion = new System.IO.StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + @"\starquestion.txt");
System.IO.StreamReader Freponse = new System.IO.StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + @"\starreponse.txt");
break;
}
case 2:
{
System.IO.StreamReader Fquestion = new System.IO.StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + @"\musquestion.txt");
System.IO.StreamReader Freponse = new System.IO.StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + @"\musreponse.txt");
break;
}
case 3:
{
System.IO.StreamReader Fquestion = new System.IO.StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + @"\cinequestion.txt");
System.IO.StreamReader Freponse = new System.IO.StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + @"\cinereponse.txt");
break;
}
case 4:
{
System.IO.StreamReader Fquestion = new System.IO.StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + @"\jeuxquestion.txt");
System.IO.StreamReader Freponse = new System.IO.StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + @"\jeuxreponse.txt");
break;
}
case 5:
{
System.IO.StreamReader Fquestion = new System.IO.StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + @"\tunquestion.txt");
System.IO.StreamReader Freponse = new System.IO.StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + @"\tunreponse.txt");
break;
}
}
0
xavave Messages postés 24 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 1 mai 2012 6
29 avril 2008 à 23:29
j'ai essayé avec un switch mais ct la galère
alors j'ai fait ca:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace testRadioButton
{
public partial class Form1 : Form
{
public int a = 0;

public Form1()
{
InitializeComponent();
radioButton1.CheckedChanged += new EventHandler(radioButton1_CheckedChanged);
radioButton2.CheckedChanged += new EventHandler(radioButton2_CheckedChanged);
radioButton3.CheckedChanged += new EventHandler(radioButton3_CheckedChanged);
radioButton4.CheckedChanged += new EventHandler(radioButton4_CheckedChanged);
radioButton5.CheckedChanged += new EventHandler(radioButton5_CheckedChanged);

}
private void chargeQuestions(string question, string reponse)
{
// System.IO.StreamReader Fquestion = new System.IO.StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + @"\" + question);
// System.IO.StreamReader Freponse = new System.IO.StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + @"\" + reponse);
}
void radioButton1_CheckedChanged(object sender, EventArgs e)
{
if (radioButton1.Checked)
{
chargeQuestions("starquestion.txt", "starreponse.txt");
}
}

void radioButton2_CheckedChanged(object sender, EventArgs e)
{
if (radioButton2.Checked)
{
chargeQuestions("musquestion.txt", "musreponse.txt");
}
}

void radioButton3_CheckedChanged(object sender, EventArgs e)
{
if (radioButton3.Checked)
{
chargeQuestions("cinequestion.txt", "cinereponse.txt");
}

}

void radioButton4_CheckedChanged(object sender, EventArgs e)
{
if (radioButton4.Checked)
{
chargeQuestions("jeuxquestion.txt", "jeuxreponse.txt");
}

}
void radioButton5_CheckedChanged(object sender, EventArgs e)
{
if (radioButton5.Checked)
{
chargeQuestions("tunquestion.txt", "tunreponse.txt");
}


}



}
}
0
julow Messages postés 2198 Date d'inscription dimanche 26 août 2007 Statut Membre Dernière intervention 7 juillet 2015 244
29 avril 2008 à 23:51
J'ai testé ta solution, je tombe sur cela :

Aucune surcharge pour la méthode 'chargeQuestions' ne prend d'arguments '2'

et cette erreur se répète pour toutes ces parties de code :

chargeQuestions("starquestion.txt", "starreponse.txt");
chargeQuestions("musquestion.txt", "musreponse.txt");
chargeQuestions("cinequestion.txt", "cinereponse.txt");
chargeQuestions("jeuxquestion.txt", "jeuxreponse.txt");
chargeQuestions("tunquestion.txt", "tunreponse.txt");

je ne connais pas ce type d'erreur...
0
xavave Messages postés 24 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 1 mai 2012 6 > julow Messages postés 2198 Date d'inscription dimanche 26 août 2007 Statut Membre Dernière intervention 7 juillet 2015
30 avril 2008 à 00:01
chez moi ca marche

les 2 arguments sont entre les parentheses: string question et string reponse
mais quand j'ai copié collé il y a de caractères qui ne sont pas passés



private void chargeQuestions(string question, string reponse)

verifie que tu as bien ca pour la methode chargequestions
0
julow Messages postés 2198 Date d'inscription dimanche 26 août 2007 Statut Membre Dernière intervention 7 juillet 2015 244 > xavave Messages postés 24 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 1 mai 2012
30 avril 2008 à 00:09
Si tu as une adresse mail, j'aimerais t'envoyer mon programme afin que tu puisse voir ce qui ne va pas au pire... Je patoge un peu lol
0
xavave Messages postés 24 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 1 mai 2012 6 > julow Messages postés 2198 Date d'inscription dimanche 26 août 2007 Statut Membre Dernière intervention 7 juillet 2015
30 avril 2008 à 00:12
va sur mon site perso et envoie moi un message via le formulaire de contact comme ca j'aurai ton mail
ca m'evitera du spam

http://xavieraverbouch.free.fr

0
julow Messages postés 2198 Date d'inscription dimanche 26 août 2007 Statut Membre Dernière intervention 7 juillet 2015 244 > xavave Messages postés 24 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 1 mai 2012
30 avril 2008 à 08:55
Merci de ton aide!
Mon problème principal est résolu... Reste quelques erreurs mais elles sont petites!
Merci encore!
0