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

C#如何将PictureBox控件中4次鼠标点击的坐标存储到数组

C# PictureBox点击坐标存储解决方案

首先在你的窗体类方法外部声明全局存储变量,避免局部变量每次触发事件重置:

// 存储点击坐标的集合,默认int类型,如需double可自行转换
private List<Point> _clickedPoints = new List<Point>();
// 限制最多存储4个点位
private const int MaxCollectCount = 4;

然后补充pictureBox1_MouseDown事件的逻辑:

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    // 已采集够4个点位时不再新增,如需重新采集可调用_clickedPoints.Clear()清空集合
    if (_clickedPoints.Count >= MaxCollectCount)
    {
        return;
    }
    // 将当前点击坐标加入存储集合
    _clickedPoints.Add(e.Location);

    // 采集完4个点位后转换为所需数组格式
    if (_clickedPoints.Count == MaxCollectCount)
    {
        // 格式1:一维double数组,按[x1,y1,x2,y2,x3,y3,x4,y4]顺序存储
        double[] linearPointArray = new double[MaxCollectCount * 2];
        for (int i = 0; i < MaxCollectCount; i++)
        {
            linearPointArray[i * 2] = Convert.ToDouble(_clickedPoints[i].X);
            linearPointArray[i * 2 + 1] = Convert.ToDouble(_clickedPoints[i].Y);
        }

        // 格式2:二维double数组,每个元素对应单个点位的[x,y]
        double[,] twoDPointArray = new double[MaxCollectCount, 2];
        for (int i = 0; i < MaxCollectCount; i++)
        {
            twoDPointArray[i, 0] = Convert.ToDouble(_clickedPoints[i].X);
            twoDPointArray[i, 1] = Convert.ToDouble(_clickedPoints[i].Y);
        }
    }
}

注意事项

  • 你示例中的数组语法不符合C#规范,不支持new double[]{ 10,35)(30,55)(60,150)(80,140)}的写法,上述两种数组格式均为C#合法语法,可按需选用
  • 如需重置采集状态,可额外添加按钮点击事件执行_clickedPoints.Clear();即可重新开始采集4个点位

内容的提问来源于stack exchange,提问作者payam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:45:03