private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
points.Add(new PointF(e.X * xFactor, e.Y * yFactor));
pictureBox2.Invalidate();
label5.Visible = true;
label5.Text = String.Format("X: {0}; Y: {1}", e.X, e.Y);
counter += 1;
label6.Visible = true;
label6.Text = counter.ToString();
}
}
private void pictureBox2_Paint(object sender, PaintEventArgs e)
{
Pen p;
p = new Pen(Brushes.Green);
foreach (PointF pt in points)
{
e.Graphics.FillEllipse(Brushes.Red, pt.X, pt.Y, 3f, 3f);
}
foreach (PointF pt in points)
{
if (points.Count > 1)
{
e.Graphics.DrawLine(p, pt.X, pt.Y, 3f, 3f);
}
}
}
当我点击pictureBox1时,它在pictureBox2上画了一个点。
在pictureBox2中,我在点列表和绘图上做了一个循环。
然后我做了另一个循环,在DrawLine中,我想将最后一个点与下一个点连接起来,我该怎么办呢?
现在试过这个:
for (int i = 0; i < points.Count; i++)
{
if (points.Count > 1)
{
e.Graphics.DrawLine(p, points[i].X, points[i].Y, points[i+1].X, points[i+1].Y);
break;
}
}
但这只会连接前两个点,而不是所有其他点。
我希望每次点击并绘制一个新点时,它都会自动连接到最后一个绘制点的一条线。
答案 0 :(得分:0)
你应该使用GraphicsPath
看看这个link类来做这个,例如画一条线用这个
private void AddLineExample(PaintEventArgs e)
{
//Create a path and add a symetrical triangle using AddLine.
GraphicsPath myPath = new GraphicsPath();
myPath.AddLine(30, 30, 60, 60);
myPath.AddLine(60, 60, 0, 60);
myPath.AddLine(0, 60, 30, 30);
// Draw the path to the screen.
Pen myPen = new Pen(Color.Black, 2);
e.Graphics.DrawPath(myPen, myPath);
}
答案 1 :(得分:0)
break
只允许绘制一条线。由于您需要一次访问2个点,因此必须小心保持数组索引在边界内。如果您通过i+1
选择第二个点,则需要for
循环停止i < points.Count - 1
,以便在最后为您提供空间。