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
相关产品推荐
相关产品推荐

