2010-10-21 9 views
4

Je dois pouvoir dessiner un polygone en utilisant les emplacements de clic de la souris. Voici mon code actuel:Dessiner un polygone en utilisant des points de souris en C#

//the drawshape varible is called when a button is pressed to select use of this tool 
      if (DrawShape == 4) 
       { 
        Point[] pp = new Point[3]; 
        pp[0] = new Point(e.Location.X, e.Location.Y); 
        pp[1] = new Point(e.Location.X, e.Location.Y); 
        pp[2] = new Point(e.Location.X, e.Location.Y); 
        Graphics G = this.CreateGraphics(); 
        G.DrawPolygon(Pens.Black, pp); 
       } 

Merci

+0

Je suppose que vous êtes sur winforms. Vous avez fourni du code, mais cela fonctionne-t-il? Quelle est votre question? –

+0

Oui je suis, et ouais ça ne marche pas, je peux; t travailler sur comment stocker les mouseclicks dans le tableau pour qu'ils soient joints par une ligne, comme si dans MS Paint –

+0

Comment un utilisateur dessinerait-il un polygone? Ligne par ligne, ou le polygone entier à la fois? Vous voulez que l'utilisateur clique gauche fois sur les points et clique ensuite avec le bouton droit pour dessiner (sinon comment savoir quand l'utilisateur a fini)? –

Répondre

5

Ok voici quelques exemples de code:

private List<Point> polygonPoints = new List<Point>(); 

private void TestForm_MouseClick(object sender, MouseEventArgs e) 
{ 
    switch(e.Button) 
    { 
     case MouseButtons.Left: 
      //draw line 
      polygonPoints.Add(new Point(e.X, e.Y)); 
      if (polygonPoints.Count > 1) 
      { 
       //draw line 
       this.DrawLine(polygonPoints[polygonPoints.Count - 2], polygonPoints[polygonPoints.Count - 1]); 
      } 
      break; 

     case MouseButtons.Right: 
      //finish polygon 
      if (polygonPoints.Count > 2) 
      { 
       //draw last line 
       this.DrawLine(polygonPoints[polygonPoints.Count - 1], polygonPoints[0]); 
       polygonPoints.Clear(); 
      } 
      break; 
    } 
} 

private void DrawLine(Point p1, Point p2) 
{ 
    Graphics G = this.CreateGraphics(); 
    G.DrawLine(Pens.Black, p1, p2); 
} 
3

D'abord, ajoutez ce code:

List<Point> points = new List<Point>(); 

Sur l'objet que vous dessinez, capturer l'événement OnClick. Un des arguments devrait avoir les coordonnées X et Y du clic. les ajouter au tableau de points:

points.Add(new Point(xPos, yPos)); 

Et puis enfin, où vous dessinez les lignes, utilisez ce code:

if (DrawShape == 4) 
{ 
    Graphics G = this.CreateGraphics(); 
    G.DrawPolygon(Pens.Black, points.ToArray()); 
} 

EDIT:

Ok, donc ce qui précède le code n'est pas exactement correct. Tout d'abord, il s'agit probablement d'un événement Click au lieu d'un événement OnClick. En second lieu, pour obtenir la position de la souris, vous avez besoin de deux variables déclarées avec le tableau des points,

int x = 0, y = 0; 

alors un événement déplacement de la souris:

private void MouseMove(object sender, MouseEventArgs e) 
    { 
     x = e.X; 
     y = e.Y; 
    } 

Ensuite, dans votre événement Click:

private void Click(object sender, EventArgs e) 
    { 
     points.Add(new Point(x, y)); 
    } 
+0

Comment le code de l'événement OnClick devrait-il apparaître, parce que je n'ai rien du tout? –

+0

Sur quoi dessinez-vous les polygones? – Entity

+0

Sur une image –

Questions connexes