按钮图片与背景色匹配逻辑异常修复需求
解决按钮图片与背景色匹配的问题
我看了你的代码,问题出在点击事件里完全用随机数决定背景色,根本没关联按钮上的图片。咱们需要先把每个按钮对应的图片编号存起来,点击时根据这个编号来设置对应的背景色。
具体修改步骤:
- 创建一个包含位置和图片ID的类:用来替代原来的
Place类,把按钮的位置和图片编号一起存在Tag里 - 创建按钮时存储图片ID:生成按钮图片时,把图片编号和位置信息一起赋值给按钮的Tag
- 修改点击事件逻辑:根据存储的图片ID判断是汉堡图还是其他图,设置对应的背景色,去掉随机数逻辑
修改后的代码片段:
首先,替换原来的Place类为这个包含图片ID的类:
class ButtonData { public int Row { get; set; } public int Column { get; set; } public int ImageId { get; set; } }
然后,修改按钮创建的双层循环代码:
for (int i = 0; i < arr.GetLength(0); i++) { cx = x; for (int j = 0; j < arr.GetLength(1); j++) { value = rnd.Next(0, 2); t = new Button(); // 存储位置和图片ID到按钮的Tag属性中 int imgId; if (value == 0) imgId = rnd.Next(1, 2); // 汉堡图对应ID为1 else imgId = rnd.Next(2, 6); // 其他图对应ID为2-6 t.Tag = new ButtonData { Row = i, Column = j, ImageId = imgId }; t.BackColor = Color.Red; t.BackgroundImageLayout = ImageLayout.Stretch; t.BackgroundImage = Image.FromFile("..\\..\\Pictures\\" + imgId + ".png"); t.Bounds = new Rectangle(cx, y, w, h); t.Click += new System.EventHandler(this.qqq_Click); this.Controls.Add(t); arr[i, j] = t; cx += w; } y += h; }
最后,修改点击事件的逻辑:
private void qqq_Click(object sender, EventArgs e) { Button clickedBtn = (Button)sender; ButtonData btnData = (ButtonData)clickedBtn.Tag; int px = btnData.Row; int py = btnData.Column; int imgId = btnData.ImageId; // 根据图片ID设置对应背景色,移除随机数逻辑 if (imgId == 1) { mishvalue = 1; arr[px, py].BackColor = Color.Blue; } else { mishvalue = 0; arr[px, py].BackColor = Color.Green; } arr[px, py].Enabled = false; clickedBtn.Text = " "; scanner(); }
为什么原来的代码不对?
原来的qqq_Click方法里用rndmcus = rnd.Next(0, 2)随机生成0或1,完全不管按钮上的是汉堡图还是其他图,所以每次点击颜色都是随机的。现在我们把图片ID存在按钮的Tag里,点击时直接读取这个ID来判断,就能实现你要的效果:汉堡图按钮点击后变蓝,其他图片按钮点击后变绿。
内容的提问来源于stack exchange,提问作者Adar Itzhak
相关产品推荐
相关产品推荐

