尝试将List <point>的内容写入txt文件(WindowsForms C#)

时间:2015-10-09 12:56:40

标签: c#

在pictureBox1中单击List时,应该输入鼠标坐标。然后我想将List的内容发送到myFile.txt

我得到了Point是类型的特殊错误,不能用作变量。解决方案是什么?

所以这是代码:

private void pictureBox1_Click(object sender, EventArgs e)
{
    var mouseEventArgs = e as MouseEventArgs;
    Point rp = new Point(mouseEventArgs.X, mouseEventArgs.Y);
    List<Point> pts =  new List<Point>();
    pts.Add(rp);        

    //StreamWriter writer = new StreamWriter("C:\\Users\\Lenny\\Desktop\\new2.txt");
    //writer.WriteLine("X="  + mouseEventArgs.X + "Y=" + mouseEventArgs.Y);
}

public void button2_Click(object sender, EventArgs e)
{
    File.AppendAllLines("new.txt", Point);
}   

3 个答案:

答案 0 :(得分:5)

Point是一种类型,无法传递给File.AppendAllLines,因为它需要IEnumerable<string>作为第二个参数。相反,你应该通过列表。但问题是该列表是pictureBox1_Click方法的本地列表。所以你需要把它作为一个类字段然后传递它。您还必须将Point翻译为string s。

最后,您应该使用MouseClick事件而不是Click事件来获取所需信息。

private List<Point> pts =  new List<Point>();
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
    Point rp = new Point(e.X, e.Y);
    pts.Add(rp);    
}

public void button2_Click(object sender, EventArgs e)
{
    File.AppendAllLines("new.txt", pts.Select(p => p.ToString()));
    // OR
    // File.AppendAllLines("new.txt", pts.Select(p => "X= " + p.X + " Y= " + p.Y));
    pts.Clear();
}

我在编写文件后添加了Clear,假设此时您想要重新开始#34;。

答案 1 :(得分:3)

这应该可以解决问题。您可以将点保存到成员列表中,然后使用Linq将点放入可以发送到WriteAllLines的IEnumerable中。

如果要继续向现有文件添加点,可能需要使用AppendAllLines。我已经编辑了帖子,以便在将它们写入文件后从点列表中删除点。您可以执行此操作并继续向列表中添加新点,然后在追加时删除它们。

另外请注意,当您从文件中删除行时,不必格式化输出字符串。您可以简单地让点类型转换为字符串。您还可以更好地格式化它,以便以后可以更轻松地解析文件。

public Form1()
    {
        InitializeComponent();
    }

    private List<Point> points = new List<Point>(); 
    private void pictureBox2_Click(object sender, EventArgs e)
    {
        var mouseEventArgs = e as MouseEventArgs;
        Point rp = new Point(mouseEventArgs.X, mouseEventArgs.Y);
        points.Add(rp);

    }

    private void button1_Click(object sender, EventArgs e)
    {
        File.WriteAllLines("c:\\temp\\new.txt", points.Select(point => "X: " + point.X + "  Y: " + point.Y));
        points.Clear();
    }

答案 2 :(得分:1)

而不是使用&#34; Click&#34;事件,您应该使用&#34; MouseDown&#34;事件。如果您使用的是Visual Studio,请转到设计器,单击图片框,查看属性并单击闪电图标以访问事件处理程序,然后双击&#34; MouseDown&#34;。< / p>