2012-03-29 63 views
0

这是鼠标按下其中i点击点代码:我如何绘制每个点我用不同的颜色点击?

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(); 
     } 
     } 
    } 
} 

而且这是在第一个for循环油漆事件中,我在第二个for循环画点我画点之间的线路。

我想,如果我点击一个点,它将是蓝色,如果我点击第二个点,它会变成黄色。现在,当我创建他们是红色的点。

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

我不知道你的观点(是不是用简单的计数解决?)..但你应该处置笔,画笔和类似的东西... – gbianchi 2012-03-29 19:00:21

回答

1

您需要修改用于绘制每个点的画笔。这是一个简单的解决方案。

首先,将另一个变量添加到您的类中,名称为predeSelectedIndex,类型为int,并用-1初始化它。然后,你的鼠标按下事件中,添加如下所示的行:

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

现在,添加部分中的Paint事件处理程序中的正确位置如下所述:

... 
    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

无法使画笔=画笔,因为即时通讯错误无法将画笔转换为实地画笔 – user1196715 2012-03-29 21:18:24

+0

好的,我做了:brush =(SolidBrush)Brushes.Yellow;并且也在鼠标放下事件中执行了代码。但是当我运行该程序并添加新的点时,他们已经在蓝色,然后我点击它们。我希望他们像以前一样在红色,并且只有当我点击一个点时它会变成蓝色,第二个点击会变成黄色。现在,当我点击蓝色时,它添加了一个点,它的黄色。但我想,当我添加一个点,它将是红色点击它将是蓝色的其他点,我点击是黄色的另一点我点击蓝色seocnd一个黄色但是当我添加新的点,他们将是红色。 – user1196715 2012-03-29 21:27:59

+0

@ user1196715:请检查更新的代码。如上所示,改变可变画笔的类型,而不是转换为纯色画笔。这简化了您的语法并使代码更易于阅读。 – 2012-03-30 05:45:02

相关问题