繁体   English   中英

试图写一个List的内容 <Point> 到txt文件(WindowsForms C#)

[英]Trying to write the content of a List<Point> into txt file(WindowsForms 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);
}   

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将点放入可以发送到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();
    }

相反,与使用“Click”事件相比,您应该使用“MouseDown”事件。 如果您使用的是Visual Studio,请转到设计器,单击图片框,查看属性并单击闪电图标以访问事件处理程序,然后双击“MouseDown”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM