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 :

DrawString : Croix rouge


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut DrawString : Croix rouge
    Bonjour,

    Je cherche à dessiner du texte dans une fenêtre (Windows Form). Tous se passe bien la première fois le texte apparait. Je peux déplacer la fenêtre sans soucis, mais des que je la redimensionne (en augmentant) un cadre rouge avec une croix à l’intérieur apparait et plus de texte. Même en re-diminuant la taille de la fenêtre je ne récupère pas mon texte.

    Je débute donc j'ai pompé un bout de code trouvé sur le net et évidemment je le maitrise pas encore. Mais c'est la meilleure méthode d'apprentissage que j'ai trouvé.

    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
     
    protected override void OnPaint(PaintEventArgs e)
            {
                int i;
                int x = 1;
                int y = 1;
     
                System.Drawing.Graphics formGraphics = this.CreateGraphics();
                //System.Drawing.Graphics formGraphics = e.Graphics;
                System.Drawing.Font drawFont = new System.Drawing.Font("Arial", 16);
                System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
                System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat(System.Drawing.StringFormat.GenericDefault);
     
                for (i = 0; i < MonBlocDeTexte.GetNbLines(); i++)
                {
                    formGraphics.DrawString(MonBlocDeTexte.GetLine(), drawFont, drawBrush, x, y, drawFormat);
                    //formGraphics.DrawString("Hello world", drawFont, drawBrush, x, y, drawFormat);
                    y += 20;
                }
                drawFont.Dispose();
                drawBrush.Dispose();
                formGraphics.Dispose();
            }
    Merci

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Bonsoir,

    Mon problème me semble vraiment lié à l'agrandissement de la fenêtre que je ne dois pas savoir gérer. En effet quand je définie une fenêtre plus grande dans l’éditeur de C#, je re-build et je relance mon texte s'affiche bien dans toute la fenêtre mais si j’agrandis la fenêtre (au runtime) là il ré-apparait la croix rouge dans un rectangle rouge.

    si vous avez une idée, ça me décoincerai bien.

    Cordialement

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Bonsoir,

    Je pense que le soucis viens de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonBlocDeTexte.GetLine()
    On sais pas ce que c'est comme type mais j'imagine bien qu'il y a une exception dans le OnPaint.

    Essayez de débugger pour voir l'état de la variable.

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Je modifierai les 2 lignes ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // System.Drawing.Graphics formGraphics = this.CreateGraphics();
    System.Drawing.Graphics formGraphics = e.Graphics;
    et j'enleverai les 3 lignes de la fin avec les "Dispose()".
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    En debug je pense que j'aurai un message et qu'il passerai en pas à pas sur une exception.

    Suivant ton conseil j'ai remplacer par des DrawRectangle, et j'ai le meme problème.

    Merci

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2006
    Messages : 562
    Points : 859
    Points
    859
    Par défaut
    Salut.

    Modifie cette ligne de code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Drawing.Graphics formGraphics = e.Graphics;
    Et supprime celle ci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    formGraphics.Dispose ();

  7. #7
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour sysbe30
    Il faut suivre les conseils des gens mieux avises....
    Comme l'as dit Pol63,ton grand probleme vient de la creation d'un objet graphique dans l'evenement Paint du control Form....
    Ce qui est interdit et planteras à tout les coups......car l'objet graphic deja est mis à ta disposition via PaintEventArgs.....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // System.Drawing.Graphics formGraphics = this.CreateGraphics();
    System.Drawing.Graphics formGraphics = e.Graphics;
    Cette instruction n'est legitime que hors d'un vent Paint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.Drawing.Graphics formGraphics = this.CreateGraphics();
    Par exemple dans le code d'un event Button_Click....

    Il faut relire ta doc API sur GDI+......
    Bon code.......

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Bonjour,

    Je l'ai fait et j'ai toujours le carre et la croix rouge.

    Je n'ai toujours pas trouvé mon problème. Mon code ressemble donc maintenant à :
    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
     
            protected override void OnPaint(PaintEventArgs e)
            {
                int i;
                int x = 1;
                int y = 1;
     
                int MiniX = 0;
                int MiniY = 0;
                string LigneCourante;
     
               ...
     
                //System.Drawing.Graphics formGraphics = this.CreateGraphics();
                System.Drawing.Graphics formGraphics = e.Graphics;
                System.Drawing.Font drawFont = new System.Drawing.Font("Arial", 8);
                System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
                System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat(System.Drawing.StringFormat.GenericDefault);
                System.Drawing.Pen MyPen = new System.Drawing.Pen(System.Drawing.Color.Red);
     
                for (i = 0; i < MonBlocDeTexte.GetNbLines(); i++)
                {
     
                    formGraphics.DrawString(MonBlocDeTexte.GetLine(), drawFont, drawBrush, x, y, drawFormat);
                    //formGraphics.DrawLine(MyPen, x, y, 20, y);
                    y += 10;
     
                    //LigneCourante = MonBlocDeTexte.GetLine();
                    //string[] words = LigneCourante.Split(' ');
                    //if (words[0] == "S")
                    //{
                    //    formGraphics.DrawRectangle(MyPen, Convert.ToInt32(words[1]) - MiniX, Convert.ToInt32(words[2]) - MiniY, Convert.ToInt32(words[3]) - Convert.ToInt32(words[1]) - MiniX, Convert.ToInt32(words[4]) - Convert.ToInt32(words[2]) - MiniY);
                    //}
     
                }
                drawFont.Dispose();
                drawBrush.Dispose();
                //formGraphics.Dispose();
            }
    Si vous avez encore des idées sur ce problème je suis toujours intéressé. De mon cote je vais chercher la doc conseillée pour la lire.

    Merci

  9. #9
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Vérifie que OnPaint n'est pas appellé récursivement.
    Pour cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private bool OnPaintActive = false ;
     
    protected override void OnPaint(PaintEventArgs e)
    {
       if (!OnPaintActive)  
      {
         OnPaintActive = true ;     
         // xxxxx ton code
         OnPaintActive = false ;
      }
    }
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  10. #10
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Test non concluant mais il fallait le tester, c'est fait.

    Sinon je vais essayer mon code sur une machine XP (là je suis sur 7). Je vous tiens au courant mais si vous avez d'autres pistes n’hésitez pas.

    merci

Discussions similaires

  1. Croix rouge seulement sur nom du projet
    Par xant dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 04/05/2007, 11h25
  2. Probleme croix rouge au lieu d'applet
    Par bolandfranck dans le forum Applets
    Réponses: 4
    Dernier message: 03/05/2007, 17h15
  3. petite croix rouge
    Par frandis dans le forum Oracle
    Réponses: 4
    Dernier message: 13/12/2006, 10h08
  4. [VB.NET] La croix rouge de fermeture ne déclenche pas close
    Par LaChips dans le forum Windows Forms
    Réponses: 10
    Dernier message: 07/04/2006, 16h45
  5. Associer Script a la croix rouge fermeture fenetre
    Par Oaurelius dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 24/11/2005, 18h43

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