Ant*_*tin 1 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);
}
Run Code Online (Sandbox Code Playgroud)
现在,我该怎么称呼它?我不能让它工作,这不起作用:
private void Form1_Load(object sender, EventArgs e)
{
thisPolygon(); ///I've tried adding some stuff in brackets area, failed.
}
Run Code Online (Sandbox Code Playgroud)
你有一些不同的问题.
(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
Run Code Online (Sandbox Code Playgroud)
将此更改为.
Point[] Wst = new Point[6];
Run Code Online (Sandbox Code Playgroud)
请记住,数组是从零开始索引的.
(2)不使用OnPaint.你正在调用thisPolygon这个OnLoad方法,它不会持久你的绘图.将您的调用移动到OnPaint表单的方法.
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
thisPolygon();
}
Run Code Online (Sandbox Code Playgroud)
(3)没有传递PaintEventArgs.你没有向你的thisPolygon方法传递任何事件参数,它甚至不会按原样编译.传入方法中的paint参数OnPaint.
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e); // Pass in e
thisPolygon();
}
Run Code Online (Sandbox Code Playgroud)