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#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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?

  4. #4
    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 !

  5. #5
    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());
     
    }
    }

  6. #6
    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 ???

  7. #7
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    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 : 822
    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.

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