为何程序绘制的所有线条均起始于左上角?如何解决该问题?
问题分析与修复方案
问题根源
你的代码核心问题是数组索引使用错误:
- C#数组索引从0开始,但你的
kliks初始值为0,第一次点击后直接自增为1,导致第一个点击的点被存在punten[1],而punten[0]始终是默认的Point(0,0)(窗口左上角坐标)。 DrawLines方法会从数组第一个元素开始依次连接所有点,所以所有线条都会从左上角的无效点开始绘制。
修复后的代码
public partial class Form1 : Form { Point[] punten = new Point[10]; private int kliks = 0; // 直接用kliks作为数组索引,从0开始计数 public Form1() { InitializeComponent(); } private void Form1_MouseClick(object sender, MouseEventArgs e) { // 将当前点击的点存入数组对应索引位置 punten[kliks] = e.Location; kliks++; // 收集满10个点后绘制线条 if (kliks == 10) { // 使用using自动释放资源,避免内存泄漏 using (Pen pen = new Pen(Color.Blue)) using (Graphics papier = this.CreateGraphics()) { papier.DrawLines(pen, punten); } // 可选:如果需要重复绘制,可在此重置kliks为0 // kliks = 0; } } }
关键修改说明
- 删掉冗余的
lijst变量,直接用kliks作为数组索引,确保第一个点击的点存在punten[0],让线条从你实际点击的第一个点开始连接。 - 调整判断条件为
kliks == 10,因为第10次点击后kliks自增为10,此时数组的10个元素(索引0-9)已全部被正确填充。 - 用
using语句管理Pen和Graphics资源,避免长期运行的内存泄漏问题。 - 移除了原代码中重复的
punten[lijst] = e.Location;赋值操作,该代码完全多余。
内容的提问来源于stack exchange,提问作者Stefan N
相关产品推荐
相关产品推荐

