2012-03-29 3 views
0

ist der Code der Maus nach unten, wo ich auf die Punkte klicken:Wie male ich jeden Punkt, auf den ich in einer anderen Farbe klicke? Dieser

private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     label1.Text = e.X.ToString(); 
     label2.Text = e.Y.ToString(); 
     label1.Visible = true; 
     label2.Visible = true; 
     label3.Visible = true; 
     label4.Visible = true; 
     // find the index that is closest to the current mouse location 
     MinDist = float.MaxValue; 

     for (idx = 0; idx < Point_X.Count; ++idx) 
     { 
     float dx = Point_X[idx] - e.X; 
     float dy = Point_Y[idx] - e.Y; 
     float dist = (float)Math.Sqrt(dx * dx + dy * dy); 

     if (dist < MinDist) 
     { 
      MinDist = dist; 
      selectedIndex = idx; 
     } 
     } 

     if (MinDist < 5) 
     { 
     mouseMove = true; 
     OriginalX = Point_X[(int)selectedIndex]; 
     OriginalY = Point_Y[(int)selectedIndex]; 

     if (cyclicSelectedIndex.Count() == 2) 
     { 
      cyclicSelectedIndex[currentCyclicIndex] = (int)selectedIndex; 
      currentCyclicIndex++; 
      if (currentCyclicIndex > 1) 
      { 
       currentCyclicIndex = 0; 
      } 
      if ((cyclicSelectedIndex[0] == cyclicSelectedIndex[1]) || 
       (cyclicSelectedIndex[0] == -1) || (cyclicSelectedIndex[1] == -1)) 
      { 
       button2.Enabled = false; 
      } 
      else 
      { 
       button2.Enabled = true; 
      } 

      label13.Text = selectedIndex.ToString(); 
      label13.Visible = true; 
      label14.Visible = true; 

      listView1.Items.Add(selectedIndex.ToString()).EnsureVisible(); 
     } 
     } 
    } 
} 

Und dies ist das Paint-Ereignis in der ersten FOR LOOP i die Punkte in der zweiten FOR LOOP ziehen ziehe ich die Linien zwischen den Punkten .

Ich möchte, dass, wenn ich auf einen Punkt klicke, wird es blau und wenn ich auf den zweiten Punkt klicke, wird es gelb sein. Jetzt, wenn ich die Punkte erstelle, sind sie rot.

private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) 
{ 
    Point connectionPointStart; 
    Point connectionPointEnd; 
    Graphics g = e.Graphics; 
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
    SolidBrush brush = new SolidBrush(Color.Red); 
    Pen p = new Pen(brush); 
    for (int idx = 0; idx < Point_X.Count; ++idx) 
    { 
     Point dPoint = new Point((int)Point_X[idx], (int)Point_Y[idx]); 
     dPoint.X = dPoint.X - 5; // was - 2 
     dPoint.Y = dPoint.Y - 5; // was - 2 
     Rectangle rect = new Rectangle(dPoint, new Size(10, 10)); 
     g.FillEllipse(brush, rect); 
    } 

    for (int i = 0; i < connectionStart.Count; i++) 
    { 
     int startIndex = connectionStart[i]; 
     int endIndex = connectionEnd[i]; 

     connectionPointStart = new Point(
     (int)Point_X[startIndex], (int)Point_Y[startIndex]); 
     connectionPointEnd = new Point(
     (int)Point_X[endIndex], (int)Point_Y[endIndex]); 
     p.Width = 4; 
     g.DrawLine(p, connectionPointStart, connectionPointEnd); 
    } 
} 
+0

Ich weiß nicht, über Ihr Punkt (ist das nicht lösen mit einer einfachen Zählung?) .. aber Sie sollten Stift, Bürsten und solche Dinge zu entsorgen ... – gbianchi

Antwort

1

Sie müssen den Pinsel ändern, den Sie verwenden, um jeden Punkt zu zeichnen. Hier ist eine einfache Lösung.

Fügen Sie zunächst Ihrer Klasse eine weitere Variable namens sourceSelectedIndex vom Typ int hinzu, und initialisieren Sie sie mit -1. Dann in Ihrem Maus-Down-Ereignisse, fügen Sie die Zeile wie folgt dar:

 ... 
    if (dist < MinDist) 
    { 
     MinDist = dist; 
     previouslySelectedIndex = selectedIndex // <--- Add this line 
     selectedIndex = idx; 
    } 
    ... 

Nun fügen Sie den Abschnitt unten angegeben an der richtigen Stelle innerhalb der Paint-Ereignishandler:

... 
    Brush brush = Brushes.Red; // <-Change the type from SolidBrush to Brush, which is more general 
    ... 
    for (int idx = 0; idx < Point_X.Count; ++idx) 
    { 
     ... 

     // START OF NEW CODE 

     brush = Brushes.Red; // <-- This line was not in my original solution. 

     if (idx==selectedIndex) // <-- Add all this code 
      brush = Brushes.Blue; 
     else if(idx==previouslySelectedIndex) 
      brush = Brushes.Yellow; 

     // END OF NEW CODE 

     g.FillEllipse(brush, rect); 
    } 
    ... 
+0

Cant make brush = Pinsel seit im bekommen Fehler kann nicht konvertieren Pinsel zu Solidbrush – user1196715

+0

Ok ich tat : pinsel = (SolidBrush) Pinsel.Gelb; und habe den Code in der Maus auch runter gemacht. Aber wenn ich das Programm starte und neue Punkte hinzufüge, sind sie bereits blau, bevor ich auf sie klicke. Ich möchte, dass sie wie zuvor in Rot sind und nur wenn ich auf einen Punkt klicke, wird er blau und der zweite immer der zweite Klick ist gelb. Wenn ich jetzt einen Punkt hinzufüge, wird sein Blau, wenn ich darauf klicke, gelb. Aber ich will, dass, wenn ich einen Punkt hinzufüge, es wird Rot sein, klick es wird blau sein, anderer Punkt, den ich klicke, ist Gelb ein anderer Punkt ich klicke Blau seocnd ein Gelb, aber wenn ich neuen Punkt hinzufüge, werden sie immer Rot sein. – user1196715

+0

@ user1196715: Bitte überprüfen Sie den aktualisierten Code. Anstatt zu Solid Brush zu konvertieren, ändern Sie den Typ des variablen Pinsels, wie ich oben zeige. Das vereinfacht Ihre Syntax und macht den Code leichter lesbar. –

Verwandte Themen