Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1036 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [ C# - Débutant] Dessiner des lignes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ C# - Débutant] Dessiner des lignes

n°1553014
jeromeke
Posté le 03-05-2007 à 11:12:27  profilanswer
 

Bonjour,  
 
je cherche a faire un petit programme permettant de tracer des lignes droites,  
en cliquant une fois pour le point de départ, et une deuxième fois pour le point de fin.
 
j'ai compris que je devais mettre les points dans une array
 

Code :
  1. private ArrayList points = new ArrayList();
  2. Pen pen = new Pen( Color.Black );
  3. private void panel1_MouseDown( object sender, MouseEventArgs e )
  4. {
  5. points.Add( new Point( e.X, e.Y ) );
  6. panel1.Invalidate();
  7. }
  8. private void panel1_Paint( object sender, PaintEventArgs e )
  9. {
  10. Graphics graphicsObject = e.Graphics;
  11. ???
  12. ???
  13. graphicsObject.DrawLine( pen, ???, ??? )
  14. }


 
Si quelqu'un peut m'aider... Ce serait vraiment sympa :)
 
Jérôme


Message édité par jeromeke le 03-05-2007 à 11:13:15
mood
Publicité
Posté le 03-05-2007 à 11:12:27  profilanswer
 

n°1553406
moi23372
Posté le 03-05-2007 à 20:39:15  profilanswer
 

en fait les deux paramètres que tu as besoins, c'est ceux que tu as dans ton arrayList
 
private void panel1_Paint( object sender, PaintEventArgs e )
{
    Graphics graphicsObject = e.Graphics;  
 
    if (points != null && points.count == 2)
    {
       graphicsObject.DrawLine( pen,  (Point)points[0],  (Point)points[1] );
    }
}


Message édité par moi23372 le 03-05-2007 à 20:41:01
n°1556737
jeromeke
Posté le 08-05-2007 à 00:23:38  profilanswer
 

Merci, j'ai réussi à tracer des traits,
mais j'ai un problème: quand je trace un nouveau trait il efface le précédent...
Quelqu'un à la solution?
 

Code :
  1. // lijst van coördinaten
  2.         private ArrayList points = new ArrayList();
  3.         private int teller = 0;
  4.         private int i = 0;
  5.         // pen instellen
  6.         Pen pen = new Pen(Color.DarkBlue);
  7.         // method drawPanel_MouseDown: teller + 1 & coördinaat wordt opgeslaan
  8.         private void drawPanel_MouseDown(object sender, MouseEventArgs e)
  9.         {
  10.             teller++;
  11.             points.Add(new Point(e.X, e.Y));
  12.             drawPanel.Invalidate(); // refresh panel
  13.         } // einde method drawPanel_MouseDown
  14.         // method drawPanel_Paint
  15.         private void drawPanel_Paint(object sender, PaintEventArgs e)
  16.         {
  17.             // indien 2 punten wordt de figuur getoond
  18.             if (teller == 2)
  19.             {
  20.                 // get graphics object for panel
  21.                 Graphics graphicsObject = e.Graphics;
  22.                 graphicsObject.DrawLine(pen, (Point)points[i], (Point)points[i + 1]);
  23.                 i = i + 2;
  24.                 teller = 0;
  25.             } // einde if
  26.         } // einde method drawPanel_Paint


 
Jérôme

n°1556744
archimed
Posté le 08-05-2007 à 01:16:37  profilanswer
 

  drawPanel.Invalidate(); // refresh panel
-> Tu actualise ton drawPanel donc ça t'efface ce que tu avais déjà dessiné dessus.

n°1556768
jeromeke
Posté le 08-05-2007 à 08:40:44  profilanswer
 

Bonjour, quand je supprime drawPanel.Invalidate(); il n'affiche plus rien,
une idée?

n°1556844
archimed
Posté le 08-05-2007 à 13:47:33  profilanswer
 

Je me suis mal exprimé.
 
La méthode invalidate provoque l'évènement OnPaint (qui redessine ton control).
 
Voila ce que fait ton code :
A chaque clique tu déclanche le OnPaint
Quand teller = 2 , le Onpaint efface ce que tu vais dessiné et  dessine uniquement une ligne avec les 2 derniers points
Mais quand ta valeur teller ne vaut pas 2, Onpaint efface ce qu'il y avais dessus mais sans rien dessiné.
 

n°1556914
jeromeke
Posté le 08-05-2007 à 17:19:52  profilanswer
 

Merci beaucoup pour ton aide archimed,
je comprends maintenant le problème,
mais le livre que j'ai ( Deitel - C# for programmers ) n'offre malheureusement pas de solution au problème :-(
Lorsque je mets la method Invalidate sous le if, plus rien ne s'affiche...
Connaitrais-tu la solution?
 

n°1556936
archimed
Posté le 08-05-2007 à 18:50:28  profilanswer
 

Ca dépend de ce que tu veux faire.
 
Si tu veux dessiner tout les lignes avec un point en commun (ligne1 a pour coordonée (point1,point2) ligne2(point2,point3)  ...  )
Dans ton OnPaint tu peux faire :
 

Code :
  1. if (teller >0)
  2.             {
  3.                 for (int index = 0; index < i; index++)
  4.                 {
  5.                     Graphics graphicsObject = e.Graphics;
  6.                     graphicsObject.DrawLine(pen, (Point)points[index], (Point)points[index + 1]);
  7.                 }
  8.              
  9.                 i = i + 1;
  10.               //teller = 0;
  11.             }


 
ou sinon tu peux faire (ligne1 a pour coordonée (point1,point2) ligne2(point3,point4)  ...  ):
 
 

Code :
  1. if (teller >0)
  2.             {
  3.                 for (int index = 0; index < i; index++)
  4.                 {
  5.                     Graphics graphicsObject = e.Graphics;
  6.                     graphicsObject.DrawLine(pen, (Point)points[index], (Point)points[index + 1]);
  7.                     index++;
  8.                 }
  9.              
  10.                 i = i + 1;
  11.               //teller = 0;
  12.             }


 
 
Sachant que ton code peux être simplifié, teller et i ne serve en réalité à rien le code complet :  
 

Code :
  1. private System.Collections.ArrayList points = new System.Collections.ArrayList();
  2. Pen pen = new Pen(Color.DarkBlue);
  3.         private void drawPanel_Paint(object sender, PaintEventArgs e)
  4.         {
  5.             if (points.Count > 1)
  6.             {
  7.                 for (int index = 0; index < points.Count - 1; index++)
  8.                 {
  9.                     Graphics graphicsObject = e.Graphics;
  10.                     graphicsObject.DrawLine(pen, (Point)points[index], (Point)points[index + 1]);
  11.                     //index++;
  12.                 }
  13.             }
  14.         }
  15.         private void drawPanel_MouseDown(object sender, MouseEventArgs e)
  16.         {
  17.             points.Add(new Point(e.X, e.Y));
  18.             this.Invalidate();
  19.         }

n°1556950
jeromeke
Posté le 08-05-2007 à 19:10:13  profilanswer
 

Je ne sais comment te remercier archimed,
merci beaucoup pour ton aide et pour ton temps...
Si je peux t'aider (programmes graphiques) tu me contactes :)
 
Jérôme


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [ C# - Débutant] Dessiner des lignes

 

Sujets relatifs
Je rame en HTML: un titre en deux lignessomme de lignes myqsl
[Html]Disparition des lignes de cadreDébutant, comment arriver au stade pro?
[Debutant] soucis pour consulter source site web[Résolu][C] recv: des = pour couper les lignes trop longues :/
il ya quelqu un qui m`aider sur cette taches svp debutant[débutant] retrouver la ligne courante du fichier
dessiner un rectangle vide sur une image[Erreur python]underlying C/C++ object has been deleted [ Résolu ]
Plus de sujets relatifs à : [ C# - Débutant] Dessiner des lignes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR