[英]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.