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 :

dessin en C#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut dessin en C#
    Bonjour,

    j'essaye de dessiner à main levée (au stylet) dans une pictureBox. je n'ai pas d'erreur à la compilation. mais quand je lance le programme et que je veux dessiner dans ma pictureBox j'ai l'erreur suivante:


    Une exception non gérée du type 'System.NotSupportedException' s'est produite dans System.Windows.Forms.dll
    Informations supplémentaires : NotSupportedException

    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
     
    // signatureclient
    // 
    this.signatureclient.Location = new System.Drawing.Point(8, 168);
    this.signatureclient.Size = new System.Drawing.Size(72, 64);
    this.signatureclient.ParentChanged += new System.EventHandler(this.signatureclient_ParentChanged);
    this.signatureclient.MouseUp += newMouseEventHandler(this.signatureclient_MouseUp);
    this.signatureclient.MouseMove += new MouseEventHandler(this.signatureclient_MouseMove);
    this.signatureclient.MouseDown += new MouseEventHandler(this.signatureclient_MouseDown);
     
     private void signatureclient_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) {
           bMouseDown = true;
           picBoard.Capture = true;
        }
     
        private void signatureclient_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) {
           bMouseDown = false;
           picBoard.Capture = false;
           OldPos = new Point(-1,-1);
        }
     
        private void signatureclient_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) {
          if (bMouseDown){
            Graphics g = signatureclient.CreateGraphics();
            g.SmoothingMode = SmoothingMode.AntiAlias;      
            Pen pen = new Pen(Color.Black);
            if (OldPos!=new Point(-1,-1)){
              g.DrawLine(pen,OldPos,new Point(e.X,e.Y));    
            };
            OldPos = new Point( e.X, e.Y );                 
          };
        }
    }
    quand je bouge mon stylet dans la zone du pictureBox:
    "Une exception non gérée du type 'System.NotSupportedException' s'est produite dans System.Windows.Forms.dll
    Informations supplémentaires : NotSupportedException"

    et j'ai la ligne qui se surligne en vert: Pen pen = new Pen(Color.Black); en me précisant que ce code a appelé une autre fonction.

    PS: quand je démarre l'application sous Windows aucun problème..
    Dernière modification par Invité ; 18/05/2007 à 15h32.

  2. #2
    Invité
    Invité(e)
    Par défaut
    une idée?, j'ai enlevé le corps de la méthode du mouseMove et je n'ai plus l'erreur je ne vois pas ce qui gène...
    Dernière modification par Invité ; 18/05/2007 à 15h52.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Je ne sais pas trop d'ou vient ton problème,.. mais...

    Evite d'instancier des éléments dans un évennement type "move" ou de façon général qui ne soit pas ponctuel : tu va gaver ton garbage collector comme une oie...

    Imagine par exemple pour ton Pen, un tableau et un stylo : a chaque fois que tu bouge d'un mm ton stylo sur le tableau, tu jetes le précédent et tu en créer un nouveau... C'est très couteux et ta poubelle va être submergée...

    En gros : évite le plus possible les "new" dans un évennement de ce genre...

    (argh j'ai vu que tu recréais aussi ton graphics.. Utilise plutot .clear() Tu gagneras en performance : vider un garbage pompe beaucoup de ressources)

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 104
    Par défaut
    Bonjour,

    1/ D'une manière générale, les opérations sur les Graphics des contrôles IHM sont à faire dans les évènements de peinture (dont on peut demander le déclanchement avec la méthode Invalidate par exemple)

    2/ Tu utilises un contrôle comme conteneur de données mais as tu associé un Bitmap ?

    3/ Pour aller dans le sens de Chubyone, je te conseille d'utiliser les instructions "using"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    using(Pen pen = new Pen(Color.Black))
    {
            if (OldPos!=new Point(-1,-1)){
              g.DrawLine(pen,OldPos,new Point(e.X,e.Y));    
            }
    }

Discussions similaires

  1. [Graphic] Dessiner des hachures
    Par sylverspoon dans le forum 2D
    Réponses: 7
    Dernier message: 22/03/2006, 21h46
  2. [ALGO] dessiner un triangle dans le bon sens
    Par lefait dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 05/02/2005, 14h38
  3. moteur de particules :Dessiner un point
    Par houssa dans le forum OpenGL
    Réponses: 2
    Dernier message: 25/06/2003, 22h13
  4. Dessiner un rectangle avec bords et texte ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 17h17
  5. Réponses: 3
    Dernier message: 12/06/2002, 19h03

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