在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);
}
答案 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>