C#Forms - 使用Paint方法?

时间:2012-05-14 10:29:11

标签: c# forms drawing polygon graphic

在c#表单中,我创建了一个新的绘制方法:

private void thisPolygon(PaintEventArgs e)
{
    Pen clrBlue = new Pen(Color.Blue, 3);
    Point[] Wst = new Point[5];
    Wst[0] = new Point(20, 350);
    Wst[1] = new Point(110, 200);
    Wst[2] = new Point(200, 190);
    Wst[3] = new Point(210, 275);
    Wst[4] = new Point(190, 400);
    Wst[5] = new Point(50, 390);
    e.Graphics.DrawPolygon(clrBlue, Wst);
}

现在,我该怎么称呼它?我不能使它工作,这不起作用:

private void Form1_Load(object sender, EventArgs e)
{
    thisPolygon(); ///I've tried adding some stuff in brackets area, failed.
}

1 个答案:

答案 0 :(得分:5)

你有一些不同的问题。

(1)数组容量。您的阵列初始化为5个存储位置,但您尝试设置第六个值。

Point[] Wst = new Point[5]; // 5 indexes
...
Wst[5] = new Point(50, 390); // Tries to access a sixth, but is out of bounds

将此更改为。

Point[] Wst = new Point[6];

请记住,数组是从零开始索引的。

(2)不使用OnPaint 。您在thisPolygon方法中调用OnLoad,这不会影响您的绘图。将您的调用移至表单的OnPaint方法。

protected override void OnPaint(PaintEventArgs e) {
    base.OnPaint(e);
    thisPolygon();
}

(3)未通过PaintEventArgs 。您没有向thisPolygon方法传递任何事件参数,它甚至不会按原样编译。传递OnPaint方法中的paint参数。

protected override void OnPaint(PaintEventArgs e) {
    base.OnPaint(e); // Pass in e
    thisPolygon();
}