如何通过标签获取8×8网格中对应的PictureBox控件?
8×8 PictureBox网格通过坐标查找控件的优化方案
不用写一堆if判断,这几个方法更高效:
方法1:用二维数组直接索引
初始化时把所有PictureBox按坐标顺序存入二维数组,之后通过坐标转数组索引直接获取,速度最快:
// 先定义对应8×8网格的二维数组 PictureBox[,] pictureBoxGrid = new PictureBox[8, 8]; // 初始化阶段把每个PictureBox放到对应位置(假设你的坐标x、y从1到8) pictureBoxGrid[0, 0] = pb_x1y1; // x=1,y=1对应数组索引[0,0] pictureBoxGrid[0, 1] = pb_x1y2; // x=1,y=2对应数组索引[0,1] // 依次填充完所有8×8的PictureBox控件 // 查找时直接通过坐标转换索引 int targetX = 3; int targetY = 5; PictureBox targetBox = pictureBoxGrid[targetX - 1, targetY - 1];
方法2:利用控件命名规则查找
给每个PictureBox按pb_x{X}_y{Y}的规则命名(比如x=2、y=4的控件叫pb_x2_y4),之后通过控件名查找:
int x = 3; int y = 5; // 拼接目标控件名 string targetName = $"pb_x{x}_y{y}"; // 查找控件(如果控件在Panel等容器里,替换成容器的Controls) PictureBox targetBox = this.Controls.Find(targetName, true).FirstOrDefault() as PictureBox;
方法3:用字典存储坐标-控件映射
把坐标组合作为键,PictureBox作为值存入字典,适合需要动态调整的场景:
// 定义字典,用Tuple存储坐标对 Dictionary<Tuple<int, int>, PictureBox> pbMap = new Dictionary<Tuple<int, int>, PictureBox>(); // 初始化时添加映射 pbMap.Add(Tuple.Create(1, 1), pb_x1y1); pbMap.Add(Tuple.Create(1, 2), pb_x1y2); // 依次添加所有控件的坐标与控件映射 // 查找时 var targetCoord = Tuple.Create(3, 5); if (pbMap.TryGetValue(targetCoord, out PictureBox targetBox)) { // 找到目标控件,执行后续逻辑 }
内容的提问来源于stack exchange,提问作者Tor Edlund
相关产品推荐
相关产品推荐

