2010-08-26 5 views

Répondre

4

Problème résolu!

EDIT: Voici le code:

private Point p1, p2; 
List<Point> p1List = new List<Point>(); 
List<Point> p2List = new List<Point>(); 

    private void Panel1_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (p1.X == 0) 
     { 
      p1.X = e.X; 
      p1.Y = e.Y; 
     } 
     else 
     { 
      p2.X = e.X; 
      p2.Y = e.Y; 

      p1List.Add(p1); 
      p2List.Add(p2); 

      Invalidate(); 
      p1.X = 0; 
     } 
    } 

    private void Panel1_Paint(object sender, PaintEventArgs e) 
    { 
     using(var p = new Pen(Color.Blue, 4)) 
     { 
      for(int x = 0; x<p1List.Count; x++){ 
       e.Graphics.DrawLine(p, p1List[x], p2List[x]); 
      } 
     } 
    } 
+0

Vous ne devriez pas utiliser 'Panel1.CreateGraphics()', vous devriez plutôt utiliser la méthode 'OnPaint' du panneau. – TheCloudlessSky

+0

@TheCloudlessSky cet exemple est sur un événement MouseDown(). – Rye

+0

Je le sais. Ce que vous * devriez * faire, c'est "quand la souris se déplace, placez la position de vos objets", cela signifie que vous déplacez des points, des lignes, des formes, peu importe. Ensuite, à la * fin * de cette méthode, vous appelez 'Refresh()' pour que le contrôle redessine. La méthode de peinture est gérée par 'OnPaint()'. * Ceci * est où (OnPaint) vous * dessinez * tout. Vous prenez les positions actuelles et les dessinez. Jetez un oeil à ma réponse de l'autre poste pour voir ce que je veux dire. Vous devriez * jamais * besoin d'appeler 'CreateGraphics()' pendant un événement si vous peignez * sur * le contrôle. – TheCloudlessSky

2

Vous pouvez gérer l'événement clic de souris sur le panneau (par exemple) et récupérer l'emplacement du clic (en utilisant les args d'événements). Stockez cet emplacement dans un attribut. Faites cela pour autant de points que nécessaire. Dans l'événement Peinture de panneau, appelez la peinture parent, puis tracez les lignes entre vos points.

+0

Merci, je vais essayer. – Rye

2

Quelque chose comme ça devrait le faire:

Point firstPoint; 
Point seondPoint; 

private void panel1_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (this.firstPoint == null) { 
     this.firstPoint = e.Location; 
    } 

    if (this.secondPoint == null) { 
     this.secondPoint = e.Location; 
    } 

    panel1.Invalidate(); 
} 

private void panel1_Paint_1(object sender, PaintEventArgs e) 
{  
    Using (pn as new Pen(Color.Blue, 5)) 
    { 
     e.Graphics.DrawLine(pn, firstPoint, secondPoint); 
    } 
} 

EDIT: Vous ne aussi besoin de faire CreateGraphics pour tracer la ligne - en cas de peinture que vous avez un objet graphique déjà.

+0

Ce code me dit simplement de tracer une ligne du point a au point b. – Rye

+0

Quelle est la première ligne de votre question? – Pondidum

+0

Comme vous pouvez le voir à partir du code, je dessine deux lignes là-bas. Je veux que la première ligne soit un point puis la deuxième ligne aussi. Après cela, je veux les connecter ensemble pour créer une vraie ligne. Utilisez-vous Adobe PDF Reader? si c'est le cas, essayez de regarder sa fonction d'outil de distance. – Rye

Questions connexes