尝试编写List转换成文本文件(WindowsForms c#)

本文关键字:文件 文本 WindowsForms 转换 List Point | 更新日期: 2023-09-27 18:16:52

应该在点击pictureBox1时将鼠标坐标输入到列表中。然后我想把List的内容发送到myfile。txt

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

代码如下:

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

尝试编写List<Point>转换成文本文件(WindowsForms c#)

Point是一个类型,不能传递给File.AppendAllLines,因为它需要IEnumerable<string>作为第二个参数。相反,你应该传递清单。但是您的问题是该列表是pictureBox1_Click方法的局部列表。你需要让它成为一个类字段,然后传递它。你还得把Point s翻译成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,假设在那时您想要"重新开始"。

这应该能奏效。您可以将点保存到成员列表中,然后使用Linq将点放入IEnumerable中,该IEnumerable可以发送给WriteAllLines。

如果您希望不断向现有文件添加点,则可能需要使用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();
    }

与其使用"Click"事件,不如使用"MouseDown"事件。如果你使用的是Visual Studio,打开设计器,点击图片框,查看属性,点击闪电图标进入事件处理程序,然后双击"MouseDown"。