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

C# Discussion :

Exception après la troisième impression


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 5
    Par défaut Exception après la troisième impression
    Bonjour,

    je suis débutant en c#, j'ai fait une appli qui permet d'imprimer le contenu d'une picturebox. Une foi la photo imprimé, je fais disparaître le bouton imprimer et réapparaître le bouton de sélection de photo une foi la photo sélectionnée, le bouton imprimer réapparaît. Lorsque j'essai d'imprimer pour la troisième fois j'ai une exception sur graphics.drawing.

    commentaires:

    1- si je n'utilse pas de timer, j'ai des exceptions (ArgumentsNullException) idem pour Thread.Sleep
    2- le if flag =0 est la car je ne sais pas pourquoi mais la première foi que j'appui sur imprimer le code se lance 1 fois, la 2eme, 2 fois, la 3eme, 3 fois,.....

    mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    private void Print_Click(object sender3, EventArgs e3)
            {
     
                if (flag == 0)
                {
                    myTimer3.Tick += new EventHandler(Timer3);
                    flag = 1;
                    myTimer3.Interval = 5;
     
                 }
                myTimer3.Start();
     
            }
    private void Timer3(Object myObject3, EventArgs myEventArgs3)
            {
                try
                {
     
                    myTimer3.Stop();
                    myTimer3.Dispose();
                    Recom.Visible = false;
                    Print.Visible = false;
                    panel1.BackgroundImage = null;
                    panel1.BackgroundImage = Image.FromFile("E:/livre/conf/loading.gif");
                    pictureBox2.Visible = false;
                    pictureBox5.Visible = false;               
     
                    Thread.Sleep(interval2);
                    imprimer();
                    debut();
     
     
     
     
                }
                catch (Exception ex)
                {
                    MessageBox.Show( ex.ToString());
                }
     
     
            }
     
    private void imprimer() 
            {
                        pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); 
                        pd.PrintPage += null;
                        pd.Print();
                        pd.Dispose();
     
            }
     
    private void pd_PrintPage(object senderP, System.Drawing.Printing.PrintPageEventArgs ev)
            {
                try
                {
     
                        MessageBox.Show("1");
                        ev.Graphics.DrawImage(this.pictureBox5.Image, 0, 0, 390, 300);
                        ev.HasMorePages = false;
                        ev.Graphics.Dispose();
     
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
     
                }
            }
    Exception:
    SystemAccessViolation ev.Graphics.Drawing dans la fonction pd_printpage
    Merci de m'aider

  2. #2
    SLE
    SLE est déconnecté
    Membre émérite Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Par défaut
    C'est normal, vous ajoutez chaque fois votre Timer3 au Tick de votre timer.
    Une seule fois suffit !
    Idem plus bas dans votre code...

  3. #3
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    Je pense que, si tu dois utiliser un Timer pour éviter une ArgumeentNullException, c'est qu'il y a déjà un problème à ce niveau. Idem pour le Flag (?). Avant de t'initéresser à ton bug, cherche à résoudre ces deux points. Coder, ce n'est pas bidouiller.

    Je n'ai pas le temps d'analyser et de tester ton code pour mieux te conseiller sur comment régler ces points. dsl.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 5
    Par défaut
    ok merci pour le timer je vois, en revanche comment ça idem en bas du code?

  5. #5
    SLE
    SLE est déconnecté
    Membre émérite Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Par défaut
    Oui, dans votre fonction Imprimer()...

    Vous pouvez également simplifier l'écriture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myTimer3.Tick += Timer3;
    et si vous devez retirer l'event

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myTimer3.Tick -= Timer3;
    Et effectivement, comme le souligne kheironn, il y a un problème de conception dans ce code !

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 5
    Par défaut
    Ok je pense avoir saisi pour le timer.

    j'ai écouté kheironn, si j'exécute mon code en direct sans timer ni rien, je sais pourquoi il me sort un nullexception, c'est simplement qu'il lance plusieurs foi la fonction mais pourquoi le code boucle?????
    quand je click sur imprimer voila comment se déroule le programme: MsgBox("Imprimer"),MsgBox("fct pd_PrintPage"),MsgBox("fct pd_PrintPage"),MsgBox("Imprimer"),MsgBox("fct pd_PrintPage"),MsgBox("fct pd_PrintPage"),MsgBox("fct pd_PrintPage"),MsgBox("fct pd_PrintPage"), Donc à chaque fois le code boucle de plus belle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
     
    private void Print_Click(object sender3, EventArgs e3)
    {
    MessageBox.Show("Imprimer");
     
    Recom.Visible = false;
    Print.Visible = false;
    panel1.BackgroundImage = null;
    panel1.BackgroundImage = Image.FromFile("E:/livre/conf/loading.gif");
    pictureBox2.Visible = false;
    pictureBox5.Visible = false; 
     
     
    imprimer();
    debut(); //dans cette fonction réinitialisation de pictureBox5: pictureBox5.Image=null;
     
    }
     
     
    private void imprimer() 
    {
    pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); 
    pd.Print();
     
    }
     
    private void pd_PrintPage(object senderP, System.Drawing.Printing.PrintPageEventArgs ev)
    {
    try
    {
     
    MessageBox.Show("Fonction pd_PrintPage");
     
    ev.Graphics.DrawImage(this.pictureBox5.Image, 0, 0, 390, 300);
    ev.HasMorePages = false;
    ev.Graphics.Dispose();
     
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.ToString());
     
    }
    }

  7. #7
    SLE
    SLE est déconnecté
    Membre émérite Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Par défaut
    Comme je l'ai dit tout à l'heure, c'est normal puisqu'à chaque passage dans Imprimer() vous ajoutez la même méthode à votre event PrintPage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pd.PrintPage += pd_PrintPage;
    ne doit être défini qu'une seule fois, en dehors de la méthode Imprimer() => dans votre constructor par exemple.

    Je ne vois pas non plus pourquoi vous faites

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    panel1.BackgroundImage = null;
    panel1.BackgroundImage = Image.FromFile("E:/livre/conf/loading.gif");
    alors que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    panel1.BackgroundImage = Image.FromFile("E:/livre/conf/loading.gif");
    est suffisant. Pourquoi vouloir affecter un NULL avant ???

  8. #8
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Dans la lignée de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    panel1.BackgroundImage = null;
    panel1.BackgroundImage = Image.FromFile("E:/livre/conf/loading.gif");
    Je ne comprends pas non plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); 
    pd.PrintPage += null;
    Peut être que ça a une utilité que je ne connais pas mais s'abonner à null, je ne savais même pas que c'était possible x)
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  9. #9
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    Citation Envoyé par MaximePalmisano Voir le message
    Dans la lignée de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    panel1.BackgroundImage = null;
    panel1.BackgroundImage = Image.FromFile("E:/livre/conf/loading.gif");
    Je ne comprends pas non plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); 
    pd.PrintPage += null;
    Peut être que ça a une utilité que je ne connais pas mais s'abonner à null, je ne savais même pas que c'était possible x)
    s'abonner à null ? Quelle drôle d'idée. Je veux bien savoir pourquoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    panel1.BackgroundImage = null;
    ne sert à rien puisque tu lui donnes immédiatement après la valeur qui va bien.
    Tu dois bien penser à ce dont tu as besoin AVANT de coder, prendre un bout de papier, écrire, PUIS JOUER dans ta tête le code et ENFIN coder. Des fautes de codes aussi grossières sont dues à une manque de recule avant le codage.
    Tu es débutant en programmation, il te manque donc encore des réflexes qui viendront avec l'expérience

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 5
    Par défaut
    Merci beaucoup pour votre aide. C'est juste que j'ai pris l'habitude pour une picturebox de passer son image à null avant de la remplir, dans une appli précédente si je ne faisais pas ça ça plantait. donc ici comme il s'agissait d'une image j'ai fait pareil, sans trop réfléchir.

    Merci encore pour votre aide. Maintenant le dernier problème que j'ai du code qui se lance 2 fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
     
     
            System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer() ;
     
     
            string backgrd="";
            PrintDocument pd = new PrintDocument();
     
     
     
            private  void Timer(Object myObject, EventArgs myEventArgs)
            {
                myTimer.Stop();
                myTimer.Tick -= Timer;
                CaptureInfo.CaptureFrame();
     
     
            }
     
            public Form1()
            {
                InitializeComponent();
                pd.PrintPage += pd_PrintPage;
     
            }
     
            private void ErrorMessage(Exception error)
            {
                MessageBox.Show(error.Message, "Webcam Test", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
     
     
     
     
     
            private void debut()
            {
     
     
     
                Flash.Movie = "E:/livre/conf/photo.swf";
                panel1.BackgroundImage = Image.FromFile(backgrd);
                pictureBox1.Visible = true;
                pictureBox2.Visible = false;
                label4.Visible = true;
                label5.Visible = true;   
                Recom.Visible = false;
                Recom.Movie = null;
                Print.Visible = false;
                Print.Movie = null;
                //pictureBox2.Image = null;
                Flash.Visible = true;
     
     
     
            }
            private void Print_Click(object sender3, EventArgs e3)
            {
     
     
                    Recom.Visible = false;
                    Print.Visible = false;
                    panel1.BackgroundImage = Image.FromFile("E:/livre/conf/loading.gif");
                    pictureBox2.Visible = false;
                    pictureBox5.Visible = false;                
                    imprimer();
                    debut();
     
            }
            private void imprimer()
            {
                MessageBox.Show("2");         
                pd.Print();         
            }
     
            private void pd_PrintPage(object senderP, System.Drawing.Printing.PrintPageEventArgs ev)
            {
                try
                {
                        MessageBox.Show("1");
                        ev.Graphics.DrawImage(this.pictureBox5.Image, 0, 0, 390, 300);
                        ev.HasMorePages = false;                             
     
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
     
     
            private void Flash_Enter(object sender, EventArgs e)
            {
                myTimer.Tick += Timer;
                myTimer.Interval = 4000;
                myTimer.Start();
     
            }
     
     
     
            private void Recom_Enter_1(object sender2, EventArgs e2)
            {
     
                MessageBox.Show("3");
                debut();
     
     
            }
    le code de la méthode Recom_Enter_1 et Print_click s’exécute systématiquement 2 fois. Ces méthodes servent à des boutons flash lorsque la souris survol le code est lancé. Le truc qui colle pas c'est que ça ne le fait pas avec Flash_Enter.

  11. #11
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    As-tu fais du pas à pas pour voir à quel moment elles se lancent ? En analysant celà tu trouveras où se fait le mauvais appel.

  12. #12
    SLE
    SLE est déconnecté
    Membre émérite Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Par défaut
    Retirez la ligne de Flash_Enter et mettez-là dans le constructeur. Retirez aussi de votre procedure Timer.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 5
    Par défaut
    j'ai déplacé myTimer, j'essai le pas a pas, mais la je doit dire je bloque. je met un msg box apres chaque ligne de ma methode "debut" et je note qu'elle se déroule entièrement et 2 fois. le prblème est bien dans Recom_Enter. mais j'ai qu'une seulle ligne dans cette méthode. Comment puis-je faire pour trouver ou ca débloque?

Discussions similaires

  1. [Python 3.X] Exception après fermeture de l'application
    Par elafitz dans le forum EDI/RAD
    Réponses: 0
    Dernier message: 22/08/2014, 17h56
  2. [PDO] Exception après une requête
    Par tigunn dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/02/2014, 10h31
  3. [XL-2007] Mettre à jour aprés aperçu avant impression
    Par Nounours1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/12/2012, 11h53
  4. Après aperçu avant impression ..
    Par gontierja dans le forum WinDev
    Réponses: 1
    Dernier message: 20/06/2007, 15h33
  5. Exception lors de l'impression
    Par lilou77 dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 08/12/2005, 10h56

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