从.txt文件中获取点并将其绘制在C#中的图片框中

时间:2015-07-07 21:25:06

标签: c# user-interface plot infinite-loop

我正在尝试构建一个Windows窗体应用程序,其中我从.txt文件中读取逗号分隔列表,然后使用DrawLine函数对其进行绘制。我的代码一直陷入无限循环中,我不知道如何继续前进。我不喜欢我应该如何绘制它,我使用绘制线功能的唯一原因是因为我不知道任何其他方式所以我可以接受任何其他可能的想法更适合完成这项任务。

       private void startToolStripMenuItem_Click(object sender, EventArgs e)
    {
        StreamReader sr = new StreamReader("../../sample.txt");
        string[] values = null;
        zee1 = sr.ReadLine();
        while (zee1 != null)
        {
            values = zee1.Split(',');
            x1 = Int32.Parse(values[0]);
            x2 = Int32.Parse(values[1]);
            y1 = Int32.Parse(values[2]);
        }



        //BackGroundBitmap.Save("result.jpg"); //test if ok
        Point point1 = new Point(int.Parse(values[0]), int.Parse(values[2]));
        Point point2 = new Point(int.Parse(values[1]), int.Parse(values[2]));

        pictureBox1.Enabled = true;
        g = pictureBox1.CreateGraphics();
        g.DrawLine(pen1, point1, point2);
    }

请注意我试图在相同的图上为相同的y值绘制两个不同的x值。此外,值[0]是一个数组,其中包含.txt文件第一列中的所有数据,依此类推[1]和值[2]。

我使用的txt文件如下

  

0,4,0

     

1,2,1

     

2,1,2

     

3,6,3

     

4,1,4

     

5,3,5

     

6,8,6

1 个答案:

答案 0 :(得分:0)

您处于无限while循环中,因为条件永远不会改变。您需要更新zee1。最常用的方法是在条件

中简单地更新
while ((zee1 = sr.ReadLine()) != null)
{
    // what was here already
}

看起来好像你想绘制一组线段(我假设一个到下一个),所以你可以这样做:

private void startToolStripMenuItem_Click(object sender, EventArgs e)
{
    List<Point> points = new List<Point>();
    using (StreamReader sr = new StreamReader("../../sample.txt"))
    {
        string[] values = null;
        while ((zee1 = sr.ReadLine()) != null)
        {
            values = zee1.Split(',');
            points.Add(new Point(int.Parse(values[0]), int.Parse(values[2])));
        }
    }

    pictureBox1.Enabled = true;
    g = pictureBox1.CreateGraphics();
    for (int i = 0; i < points.Count - 1; i++)
        g.DrawLine(pen1, points[i], points[i+1]);
}