2015-10-09 30 views
2

将pictureBox1中单击的鼠标坐标送入列表时。然后我想将List的内容发送到myFile.txt尝试将列表<Point>的内容写入txt文件(WindowsForms C#)

我收到了特定的错误,即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

为什么要将坐标写为文本文件而不是二进制格式? – Fabjan

+0

@Fabjan我将喂txt文件到另一个程序。 – Lenny

回答

5

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

+0

这里最好使用'Control.MouseClick'而不是'Click'。另外,由于存在'as'运算符,因此必须进行空值检查。 – Dennis

+0

@丹尼斯,是固定的。 – juharr

+0

感谢它现在编译。但是,它不是写入文件。说:=> {“给定路径的格式不支持。”}我写的路径如下所示:File.WriteAllLines(“@ C:\\ Users \\ Lenny \\ Desktop \\ new2.txt”,点。选择(p => p.ToString())); – Lenny

1

相反,不是使用“点击”事件,你应该使用“的MouseDown”事件。如果您使用的是Visual Studio,请转至设计人员,单击图片框,查看属性并单击闪电图标以查看事件处理程序,然后双击“MouseDown”。

+0

有什么特别的原因? – Lenny

+0

使用MouseEventArgs – Rariolu

+0

好的。我也会尝试这样做。谢谢! – Lenny

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(); 
    } 
相关问题