You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何程序绘制的所有线条均起始于左上角?如何解决该问题?

问题分析与修复方案

问题根源

你的代码核心问题是数组索引使用错误:

  • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 06:35:29