在C#中将点列表转换为数组

时间:2013-02-20 12:48:37

标签: c# winforms list paint

我目前正在尝试使用Windows窗体应用程序在C#中创建一个简单的绘图程序。使用ToArray函数将我的Points列表转换为数组时,我得到一个通用的“ArgumentException未处理:参数无效”错误。我知道我以前做过这个并且工作正常,DrawLines函数有什么特别之处我不知道吗?下面是代码,有问题的行是panel1_Paint事件中的最后一行。提前感谢您提供的任何帮助。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GetSig
{
    public partial class Form1 : Form
{
    bool paint = false;
    List<Point> myPointList = new List<Point>();

    private void panel1_MouseDown(object sender, MouseEventArgs e)
    {
        paint = true;
    }

    private void panel1_MouseMove(object sender, MouseEventArgs e)
    {
        if (paint)
        {
            myPointList.Add(e.Location);
            panel1.Invalidate();
        }
    }

    private void panel1_MouseUp(object sender, MouseEventArgs e)
    {
        paint = false;
    }

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawLines(Pens.Black, myPointList.ToArray());
    }
}
}

3 个答案:

答案 0 :(得分:2)

根据MSDN

  

数组中的前两个点指定第一行。

Array中至少需要两分。

答案 1 :(得分:0)

很可能该异常不是来自ToArray,而是来自e.Graphics.DrawLines

答案 2 :(得分:0)

嗯,如果没有至少两点,你就无法绘制线条:)

if (myPointList.Count >= 2)
{
    e.Graphics.DrawLines(Pens.Black, myPointList.ToArray());
}