2013-10-08 1 views
0

Maintenant, je veux dessiner un rectangle sur le canevas en cliquant sur la souris Événement. Voici mon code:Dessiner un rectangle et le mettre à jour à chaque clic de la souris

protected void imageIR_MouseClick(object sender, System.Windows.Input.MouseEventArgs e) 
    { 
    ... 
     System.Windows.Point startPoint = e.GetPosition(canvas1); 
     rect = new System.Windows.Shapes.Rectangle 
     { 
      Stroke = System.Windows.Media.Brushes.LightBlue, 
      StrokeThickness = 10 
     }; 
     Canvas.SetLeft(rect, startPoint.X); 
     Canvas.SetTop(rect, startPoint.Y); 
     canvas1.Children.Add(rect); 
    } 

    private void Canvas_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) 
    { 
     rect = null; 
    } 

Il fonctionne très bien chaque fois que je clique sur la souris, mais pourquoi est l'ancien rectangle encore sur la toile quand je redessine le nouveau? Qu'est-ce que j'ai fait de mal?

EDIT Maintenant, il est correct, je ne ai pas besoin Canvas_MouseMove plus et au lieu:

protected void imageIR_MouseClick(object sender, System.Windows.Input.MouseEventArgs e) 
    { 
    ... 
     canvas1.Children.Remove(rect); 
     System.Windows.Point startPoint = e.GetPosition(canvas1); 
     rect = new System.Windows.Shapes.Rectangle 
     { 
      Stroke = System.Windows.Media.Brushes.LightBlue, 
      StrokeThickness = 10 
     }; 
     Canvas.SetLeft(rect, startPoint.X); 
     Canvas.SetTop(rect, startPoint.Y); 
     canvas1.Children.Add(rect); 
    } 
+0

Vous définissez 'rect = null', mais vous ne supprimez pas l'ancien rectangle de Canvas. – Vladimir

Répondre

3

Vous appelez:

rect = new System.Windows.Shapes.Rectangle(...); 

Et puis:

canvas1.Children.Add(rect); 

qui ajoutera un autre nouveau Rectangle dans votre Canvas.Children collection. Si vous souhaitez d'abord supprimer l'ancien, appelez-le d'abord:

canvas1.Children.Remove(rect); 
+0

Cela fonctionne merci. – user2754279

Questions connexes