我不能使用Point []进行循环

时间:2014-12-04 12:52:34

标签: c#

我使Point数组指定了一些点,但我无法在for循环中访问它们。有什么可以帮助我的?

Point[] _points;
private Point[] Points()
{
    Rectangle rc = ClientRectangle;
    Point[] _points=new Point[]
    {
        new Point{X=0,Y=ClientRectangle.Height/2}, 
        new Point{X=ClientRectangle.Width*22/277,Y=0}, 
        new Point{X=ClientRectangle.Width*68/277,Y=ClientRectangle.Height},
        new Point{X=ClientRectangle.Width*115/277,Y=0}, 
        new Point{X=ClientRectangle.Width*161/277,Y=ClientRectangle.Height},
        new Point{X=ClientRectangle.Width*206/277,Y=0}, 
        new Point{X=ClientRectangle.Width*254/277,Y=ClientRectangle.Height},
        new Point{X=ClientRectangle.Width,Y=ClientRectangle.Height/2} 
    };

    return _points;            
}

protected override void OnPaint(PaintEventArgs pe)
{
    Graphics gfx = pe.Graphics;
    Pen kalem = new Pen(Color.Black);
    for (int i = 0; i < _points.Length; i++)
    {
        gfx.DrawLine(kalem,_points[i],_points[i].Y);  =======>>>ERROR HERE
    }            
}

3 个答案:

答案 0 :(得分:2)

在函数中声明变量(_points)时,会覆盖属性的范围。您粘贴的代码从未将任何内容赋予_points,这意味着该数组为空。

编辑: 你不能传递_point [i] .Y,因为该方法将PointF作为参数而_point [i] .Y是一个int。

答案 1 :(得分:0)

 gfx.DrawLine(kalem,_points[i],_points[i].Y)

你应该像_points [i]一样传递_points [i] .X。我想

答案 2 :(得分:0)

我认为这就是你真正想要的。

for (int i = 0; i < _points.Length - 1; i++)
{
    gfx.DrawLine(kalem,_points[i],_points[i+1]); 
}

这将从第一个点到第二个点然后从第二个点到第三个点绘制一条线,依此类推。如果您需要关闭形状,请在for循环后添加以下内容。

// No point in drawing a closing line if there are not at least 3 points.
if(_points.Length > 2)
{
    gfx.DrawLine(kalem,_points[_points.Length - 1],_points[0]);
}