C# 从20个PictureBox中随机选2个设置相同图片的实现问题
C# 随机选取PictureBox控件设置相同图片的解决方法
报错原因
你遇到的编译报错是因为数组类型不匹配:你声明的是string类型数组,只能存储字符串值,而pictureBox1是System.Windows.Forms.PictureBox控件类的实例,二者没有默认转换规则,无法直接存入string数组。
完整实现方案
步骤1:声明正确类型的控件数组
将20个目标PictureBox控件存入PictureBox类型的数组:
PictureBox[] allPicBoxes = new PictureBox[] { pictureBox1, pictureBox2, pictureBox3, pictureBox4, pictureBox5, pictureBox6, pictureBox7, pictureBox8, pictureBox9, pictureBox10, pictureBox11, pictureBox12, pictureBox13, pictureBox14, pictureBox15, pictureBox16, pictureBox17, pictureBox18, pictureBox19, pictureBox20 };
步骤2:实现随机选取+赋值图片逻辑
// 全局实例化随机数生成器,不要放在循环内 Random rd = new Random(); // 重复执行5次操作 for (int round = 0; round < 5; round++) { // 随机取两个不同的数组索引 int idxA = rd.Next(allPicBoxes.Length); int idxB; // 确保两个索引不重复,避免选中同一个控件 do { idxB = rd.Next(allPicBoxes.Length); } while (idxA == idxB); // 赋值相同图片,可替换为你自己的图片资源 Image targetImg = Properties.Resources.你的图片资源名; // 也可用Image.FromFile("本地图片路径") allPicBoxes[idxA].Image = targetImg; allPicBoxes[idxB].Image = targetImg; // 若要求已选过的控件不再参与后续选取,放开以下代码(需提前引入using System.Linq;) // allPicBoxes = allPicBoxes.Where((p, idx) => idx != idxA && idx != idxB).ToArray(); }
注意事项
- 若使用本地路径加载图片,建议用绝对路径,避免相对路径读取失败。
- 若不需要保留原数组,每次选取后移除已选控件即可避免重复选取。
内容的提问来源于stack exchange,提问作者pisarovstefan
相关产品推荐
相关产品推荐

