尝试编写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);
}
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"。