[c# / .NET][résolu] erreur sur Application.Exit()

erreur sur Application.Exit() [c# / .NET][résolu] - C#/.NET managed - Programmation

Marsh Posté le 01-03-2005 à 19:57:33    

:hello:  
 
j'ai fait un ptit prog tout con, mais a la ligne application.exit(), il se plante lamentablement :
 

Code :
  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. class labwin2
  5. {
  6.      public static void Main()
  7.      {
  8.        Application.Run(new myForm());
  9.      }
  10. }
  11. class myForm : Form
  12. {
  13. static int nbLance=0;
  14. static string choixUtil,resRand,res,resPourc;
  15.   public myForm()
  16.   {
  17.        Text = "Jeu du pile ou face";
  18.        BackColor = Color.Beige;
  19.        Width = 300;
  20.        Height = 300;
  21.        Location = new Point(200,200);
  22.        StartPosition = FormStartPosition.Manual;
  23.      
  24.        string message = "oui : pile, non : face, annuler : quitter";
  25.        string caption = "Choix";
  26.        bool ok = true,ok2 = true;
  27.        int i = 0,temp;
  28.        MessageBoxButtons buttons = MessageBoxButtons.YesNoCancel;
  29.        DialogResult result;
  30.        Random rand = new Random();
  31.        Show();  //Affiche la form
  32. while (ok2) //Tant qu'on ne veut pas quitter
  33. {
  34.           while (ok)  //Tant qu'on veut continuer ce jeu
  35.           {
  36.                 result = MessageBox.Show(message,caption, buttons,MessageBoxIcon.Question);
  37.                 temp = rand.Next(1,3);
  38.                 if (temp == 1)    //Résultat du random
  39.                     resRand = "Pile";
  40.                 else
  41.                     resRand = "Face";
  42.                
  43.                 if(result == DialogResult.Yes)   //Click sur oui  (pile)
  44.                 {
  45.                     choixUtil = "Pile";
  46.                     if (temp == 1)
  47.                     {
  48.                         MessageBox.Show("Gagné","Pile",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
  49.                         i++; //nombe de bonnes reponses
  50.                         res = "Gagné";
  51.                     }
  52.                     else
  53.                     {
  54.                        MessageBox.Show("Perdu","Pile",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
  55.                        res = "Perdu";
  56.                     }
  57.                 }    //fin click sur oui
  58.                 if (result == DialogResult.Cancel)  //click sur cancel
  59.                 {
  60.                    ok = false;
  61.                 }  //fin click sur cancel
  62.                 if(result == DialogResult.No)   //click sur non  (face)
  63.                 {
  64.                     choixUtil = "Face";
  65.                     if (temp == 2)
  66.                     {
  67.                        MessageBox.Show("Gagné","Face",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
  68.                        i++;   //nb bonnes reponses
  69.                        res = "Gagné";
  70.                     }
  71.                     else
  72.                     {
  73.                        MessageBox.Show("Perdu","Face",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
  74.                        res = "Perdu";
  75.                     }
  76.                 }  //fin click sur non
  77.                 nbLance++;   //incrementation nombre de lancés
  78.                 resPourc = ((i*100)/nbLance).ToString();  //calcul pourcentage
  79.                Refresh();   //force l'actualisation de la form
  80.                
  81.           }    //fin tant qu'on veut continuer ce jeu
  82.           //Affichage du choix : oui : quitter, non : remimse a 0
  83.           result = MessageBox.Show("oui : quitter, non : remise à 0",caption,MessageBoxButtons.YesNo,MessageBoxIcon.Question);
  84.          
  85.           //si on clique sur oui : quitter
  86.           if(result == DialogResult.Yes)
  87.           {
  88.                     ok2 = false;
  89.           }
  90.          
  91.           //Si on clique sur non : remise à 0
  92.           if (result == DialogResult.No)
  93.           {
  94.              i = 0;
  95.              ok = true;
  96.              nbLance = 0;
  97.              choixUtil = "";
  98.              resRand = "";
  99.              res = "";
  100.              resPourc = " ";
  101.              Refresh();
  102.           }
  103. //fin tant qu'on veut jouer
  104.        MessageBox.Show("Ca va couper ... ",caption,MessageBoxButtons.YesNo,MessageBoxIcon.Question);
  105.        Application.Exit();
  106.      }
  107.   protected override void OnPaint(PaintEventArgs pea)
  108.   {
  109.            Graphics grfx = pea.Graphics;
  110.            base.OnPaint(pea);
  111.            grfx.DrawString("Numéro du lancé: " + nbLance, Font,Brushes.Black,5,5);
  112.            grfx.DrawString("Choix de l'utilisateur :      " + choixUtil,Font,Brushes.Black,40,20);
  113.            grfx.DrawString("Lancé:            " + resRand,Font,Brushes.Black,40,35);
  114.            grfx.DrawString("Résultat:                        " + res,Font,Brushes.Black,40,50);
  115.            grfx.DrawString("Pourcentage de réussite de la partie : " + resPourc+"%",Font,Brushes.Black,5,65);
  116.   }
  117. }


 
je met le code complet au cas ou  :o
 
c'est à la ligne 122  :sweat:


Message édité par didier1809 le 02-03-2005 à 21:53:30

---------------
.
Reply

Marsh Posté le 01-03-2005 à 19:57:33   

Reply

Marsh Posté le 02-03-2005 à 06:18:43    

:sweat:


---------------
.
Reply

Marsh Posté le 02-03-2005 à 12:47:31    

vraiment personne ?


---------------
.
Reply

Marsh Posté le 02-03-2005 à 12:51:36    

c'est quoi le message d'erreur exact ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-03-2005 à 12:53:23    

Harkonnen a écrit :

c'est quoi le message d'erreur exact ?


 
 


Exception non gérée : System.ObjectDisposedException: Impossible d'accéder à un
objet supprimé nommé "myForm".
Nom de l'objet : "myForm".
   at System.Windows.Forms.Control.CreateHandle()
   at System.Windows.Forms.Form.CreateHandle()
   at System.Windows.Forms.Control.get_Handle()
   at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
   at System.Windows.Forms.Form.SetVisibleCore(Boolean value)
   at System.Windows.Forms.Control.set_Visible(Boolean value)
   at System.Windows.Forms.ThreadContext.RunMessageLoopInner(Int32 reason, Appli
cationContext context)
   at System.Windows.Forms.ThreadContext.RunMessageLoop(Int32 reason, Applicatio
nContext context)
   at System.Windows.Forms.Application.Run(Form mainForm)
   at labwin2.Main()
 


---------------
.
Reply

Marsh Posté le 02-03-2005 à 12:58:57    

évidemment que ça marche pas... tu fous tout le code dans le constructeur !
Application.Exit() supprime tous les objets, dont myForm. et comme tout ton code est dans le constructeur, myForm n'existe pas au moment ou Exit() est appelé !
je te conseille de te lire un bon bouquin sur la POO, parce que là il te manque carrément les bases


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-03-2005 à 13:07:07    

Harkonnen a écrit :

évidemment que ça marche pas... tu fous tout le code dans le constructeur !
Application.Exit() supprime tous les objets, dont myForm. et comme tout ton code est dans le constructeur, myForm n'existe pas au moment ou Exit() est appelé !
je te conseille de te lire un bon bouquin sur la POO, parce que là il te manque carrément les bases


 
Bon, ok, mais alors, le code executable, je le met ou ? En poo j'ai pas trop de probleme, c'est plutot avec les Form que ca pose probleme  :sweat:


Message édité par didier1809 le 02-03-2005 à 13:08:16

---------------
.
Reply

Marsh Posté le 02-03-2005 à 13:12:24    

ben tu le mets dans une fonction, que t'appelles en réponse à un évènement dans la Form (le clic sur un bouton par exemple)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-03-2005 à 13:14:34    

didier1809 a écrit :

En poo j'ai pas trop de probleme, c'est plutot avec les Form que ca pose probleme  :sweat:


La preuve que si [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 02-03-2005 à 13:14:39    

Harkonnen a écrit :

ben tu le mets dans une fonction, que t'appelles en réponse à un évènement dans la Form (le clic sur un bouton par exemple)


 
 :jap: , mais tu n'aurais pas un site ou l'autre avec des exemples ou des cours assez claires ? Y a pas encore grand chose de bien en c# ou .NET, meme ici  :sweat:


---------------
.
Reply

Marsh Posté le 02-03-2005 à 13:14:39   

Reply

Marsh Posté le 02-03-2005 à 13:15:21    

masklinn a écrit :

La preuve que si [:spamafote]


 
On vient de commencer avec les form, et on a pas eu trop de cours, donc on fait un peu n'importe quoi, mais en C++, la ca va, je fait pas des erreurs comme ca  :D


---------------
.
Reply

Marsh Posté le 02-03-2005 à 13:21:43    

J'ai trouvé la methode OnLoad, donc la ca marche, merci de l'aide ;)


---------------
.
Reply

Marsh Posté le 02-03-2005 à 13:25:56    

didier1809 a écrit :

J'ai trouvé la methode OnLoad, donc la ca marche, merci de l'aide ;)


Ouais mais nan, c'est foireux tout ça :/

Reply

Marsh Posté le 02-03-2005 à 13:49:10    

didier1809 a écrit :

J'ai trouvé la methode OnLoad, donc la ca marche, merci de l'aide ;)


n'importe quoi !
fous un bouton dans ta Form, et démarre le code par appui sur le bouton, c'est largement plus propre


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-03-2005 à 19:47:20    

Harkonnen a écrit :

n'importe quoi !
fous un bouton dans ta Form, et démarre le code par appui sur le bouton, c'est largement plus propre


 
Faire le boutton, ok, c'est facile, mais j'ai pas comprit comment on faisait pour que le Onclick (si c'est bien ca ?) fonctionnait ?
 
Ou alors c'est le mouseeventarg qu'il faut utiliser ?


---------------
.
Reply

Marsh Posté le 02-03-2005 à 19:58:27    

didier1809 a écrit :

Faire le boutton, ok, c'est facile, mais j'ai pas comprit comment on faisait pour que le Onclick (si c'est bien ca ?) fonctionnait ?
 
Ou alors c'est le mouseeventarg qu'il faut utiliser ?


le controle Button possède un évenement Click. tu dois donc ajouter un delegate EventHandler à cet évenement, qui appellera la fonction associée au click :

Code :
  1. this.button1.Click += new System.EventHandler(this.button1_Click);
  2. [...]
  3. private void button1_Click(object sender, System.EventArgs e)
  4. {
  5.    // ton code
  6. }


button1_Click est la fonction qui sera appelée quand tu cliqueras sur le bouton.
je te conseille d'acheter un bouquin sur Winforms, et de te renseigner sur la programmation évenementielle, les delegates, les evènements, etc... c'est le B-A BA


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-03-2005 à 21:53:07    

Harkonnen a écrit :

le controle Button possède un évenement Click. tu dois donc ajouter un delegate EventHandler à cet évenement, qui appellera la fonction associée au click :

Code :
  1. this.button1.Click += new System.EventHandler(this.button1_Click);
  2. [...]
  3. private void button1_Click(object sender, System.EventArgs e)
  4. {
  5.    // ton code
  6. }


button1_Click est la fonction qui sera appelée quand tu cliqueras sur le bouton.
je te conseille d'acheter un bouquin sur Winforms, et de te renseigner sur la programmation évenementielle, les delegates, les evènements, etc... c'est le B-A BA


 
 
Merci, ca marche, je prefere ca comme programmation, le 1e truc que j'avais fait ne me convenait pas :)
 
Ca change pas mal de la programation "console" les winform  :sweat:  
 
Je vais chercher un bouquin, ca pourra toujours servir  :o  
 
 
Encore merci  :jap:


---------------
.
Reply

Sujets relatifs:

Leave a Replay

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