IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] System.ArgumentException lors de fermeture d'un dialog


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2002
    Messages : 66
    Points : 40
    Points
    40
    Par défaut [C#] System.ArgumentException lors de fermeture d'un dialog
    Bonjour,

    voilà j'ai une application qui ouvre une image, et qui peut lui appliquer certains filtres de traitement d'image. j'affiche l'image de base dans une pictureBox et l'image modifiée dans une autre pictureBox.

    Seulement si j'ouvre une boite de dialogue une fois que l'image est affichée, à sa fermeture j'obtiens :
    Une exception non gérée du type 'System.ArgumentException' s'est produite dans system.windows.forms.dll
    Infos supplémentaires : Paramètre non valide utilisé
    J'ai catché cette exception dans le point d'entrée de mon appli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    static void Main() 
    		{
    			try
    			{
    				Application.Run(new MainForm());
    			}
    			catch(System.ArgumentException e)
    			{
    				Console.Write(e.StackTrace);
    			}
     
    		}
    et voici le résultat de la pile :
    at System.Drawing.Graphics.CheckErrorStatus(Int32 status)
    at System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y, Int32 width, Int32 height)
    at System.Drawing.Graphics.DrawImage(Image image, Rectangle rect)
    at System.Windows.Forms.PictureBox.OnPaint(PaintEventArgs pe)
    at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
    at System.Windows.Forms.Control.WmPaint(Message& m)
    at System.Windows.Forms.Control.WndProc(Message& m)
    at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
    at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    at System.Windows.Forms.ComponentManager.System.Windows.Forms.UnsafeNativeMethods+IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopLe programme '[2368] Resolver.exe' s'est arrêté avec le code 0 (0x0).
    Data)
    at System.Windows.Forms.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    at System.Windows.Forms.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    at System.Windows.Forms.Application.Run(Form mainForm)
    at Resolver.MainForm.Main() in c:\diplôme\sources\resolver\mainform.cs:line 497
    Je dois donc écrire qqch dans la méthode OnPaint des PictureBox pour éviter que cette exception soit lévée ? Quoi?

    Merci d'avance de vos réponses

  2. #2
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    je sais pas mais j'aurai mis ta gestion de ton excpetion a un endroit un peu moins global et essaie de l'annuler.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 291
    Points
    291
    Par défaut
    Il nous faudrait un peu plus de code pour t'aider.
    Par exemple :
    - le code qui déclenche l'ouverture et la fermeture de ta boite de dialogue.
    - le code effectué par la boite de dialogue.
    - ....

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Utilises-tu toi même ce code
    quelquepart dans le Paint de ton picturebox par exemple ou ailleurs
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2002
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    Désolé de pas avoir répondu avant, je planchais sur un autre problème.

    le code qui gère l'ouverture de ma boîte de dialogue est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private void menuSettingsOCR_Click(object sender, System.EventArgs e)
    {
    dlg1 = new OCRDialog(this);
    if(dlg1.ShowDialog()==DialogResult.OK)
    {
    backpropNetwork=dlg1.currentNetwork;
    charsList=dlg1.charsList;			
    }
    dlg1.Dispose();
     
    		}

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Enlève simplement pour essayer
    si çà donne rien c'est là que tu dois mettre ton try catch et faire un debbugg pas à pas
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2002
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    oups mauvaise manip, j'ai envoyé le message par erreur alors qu'il était pas fini...

    mais apparemment l'erreur survient chaque fois que je modifie le champ Image d'une pictureBox.

    Si je réduis ma fenetre alors qu'une image est contenue dans la pictureBox, ca réaffiche pas l'image et ca foire aussi

  8. #8
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par gmonta
    oups mauvaise manip, j'ai envoyé le message par erreur alors qu'il était pas fini...

    mais apparemment l'erreur survient chaque fois que je modifie le champ Image d'une pictureBox.

    Si je réduis ma fenetre alors qu'une image est contenue dans la pictureBox, ca réaffiche pas l'image et ca foire aussi
    met donc un point d'arrêt au départ de cet manoeuvre et debbug pas à pas pour déterminer la ligne de code qui lève l'exception
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2002
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    c quelle méthode de Form qui est exécutée quand on réaffiche après réduction ? Load ?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2002
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    en elevant dlg1.Dispose, ca fonctionne pour la boite de dialogue. Mais pourquoi ? Bon après ca me refait une erreur quand je clique sur le menu, mais ca vient au moins plus de la boite de dialogue

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2002
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    Jvais essayer d'être plus précis, parce que là j'ai du mal à comprendre les réactions de mon prog.

    Ma fenêtre est composée de 2 pictureBox:

    -pictureBox1, qui affiche l'image ouverte d'origine
    -pictureBox2, qui affiche l'image modifiée

    Les modifications se font par le biais du menu. Pour le moment, j'en ai que 2, GrayScale et threshold.

    Si j'ouvre mon image, celle-ci s'affiche donc sans problème dans la pictureBox1. A ce moment-là je peux réduire la fenêtre et la restaurer sans problème.

    Maintenant j'applique une modification en cliquant dans mon menu. Par exemple sur GrayScale. Voici le code de la fonction du menu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private void menuImageGray_Click(object sender, System.EventArgs e)
    		{
    			if(pic!=null)
    			{
    				pic.GrayScale();
    				pictureBox2.Image=pic.Image;
    			}	
    		}
    pic est une variable de Type Picture, qui est une classe que j'ai crée. pic.Image me renvoie un objet de type Bitmap, qui est l'image qui a été modifiée par une fonction de cette classe, ici GrayScale().

    pic est instanciée lors de l'ouverture de l'image par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    imBasic= new Bitmap(openFileDialog1.FileName);
    pictureBox1.Image = imBasic;
    //Création d'un objet Picture à l'ouverture du fichier
    pic = new Picture(imBasic);
    Maintenant pictureBox2 contient l'image modifiée. Et là si je réduis ma fenêtre et que je la restaure, ca me lève l'exception citée plus haut...

  12. #12
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Bon je reprends la priorité est de reperer precisement la levée de l'exception DEBUGGAGE PAS A PAS
    >F5 jusque qu'au point d'arrêt puis F8 ou F11 selon ton VS
    ainsi tu es sûr de pister une à une tes exceptions et tu connaitras par la même occasion les réactions de ton code
    Si tu as un souci de comprehension de l'exception
    donnes nous
    1. le message complet de celle-ci
    2. la ligne de code incriminée
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2002
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    je veux bien faire du pas-à-pas, mais où mettre mon point d'arrêt pour vérifier ce qu'il se passe quand je restaure la fenêtre ?

  14. #14
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    ben là c'est toi qui connait ton code alors fait ton choix si une exception est levée avant c'est qu'il faut avancer ton point d'arrêt
    Je sais c'est du "à tâton" mais perso je gère mes exceptions dès la conception (les exceptions pour chaque méthode utilisée sont connues > documentation .Net) donc je suis rarement confronté à ton cas de figure
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2002
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    Finalement je sais pourquoi ca levait une exception lorsque que ma pictureBox devait être rafraichie...

    En fait, le rafraichissement semble être géré par la plateforme. Seulement moi j'affectais un objet Bitmap au champ Image de la pictureBox. Ce qui fait que lors du rafraichissement, les paramètres dont la plateforme avait besoin n'étaient pas valides, puisque le champ Image contenait un Bitmap et non un objet Image.

    Il faut donc convertir le Bitmap en objet Image comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pictureBox1.Image=Image.FromHbitmap(bmp.GetHbitmap());
    Voilà, je pense que c'est pour ca. Si qqn pouvait confirmer ma théorie, ce serait parfait. Sinon, pour le moment, j'ai plus eu d'exception dues aux images dans mon code...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réduction dans le system tray lors de la fermeture
    Par trois_1 dans le forum Outlook
    Réponses: 3
    Dernier message: 28/01/2011, 21h54
  2. Réduction dans le system tray lors de la fermeture
    Par vince3147 dans le forum Outlook
    Réponses: 3
    Dernier message: 05/08/2007, 19h11
  3. Problème lors de fermeture d'une application
    Par midoENSI dans le forum MFC
    Réponses: 3
    Dernier message: 10/04/2007, 06h59
  4. [JFrame]System.exit() lors du clic sur la croix
    Par cyrill.gremaud dans le forum Agents de placement/Fenêtres
    Réponses: 21
    Dernier message: 17/08/2006, 10h48
  5. message lors de fermeture de formulaire
    Par Sebastien_INR59 dans le forum IHM
    Réponses: 1
    Dernier message: 09/06/2006, 08h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo