我想要做的是创建一个包含多个按钮的菜单,当用户点击其中一个按钮时,所选按钮标记将存储在一个变量中,该按钮的背景颜色会突出显示。当用户单击另一个按钮时,先前存储的变量将与新变量进行比较,如果不同,则会将先前按下的按钮的背景颜色更改回正常。这就是我到目前为止所做的:
if (!isSelected)
{
b.BackColor = Color.FromArgb(28, 145, 162);
previousPress = (int)b.Tag;
isSelected = true;
if(previousPress != currentPress)
{
b(previousPress).BackColor = Color.FromArgb(12, 34, 567); // Obviously this wont work, but hopefully it clears up on what I want to reach.
isSelected = false;
currentPress = (int)b.Tag;
}
}
B的.Tag概念从1到7不等,因为这是在构造函数方法中创建了多少个按钮。
这就是我尝试使用的内容,但有人建议我不应该使用标记,因为它只会导致错误和错误。他建议如下:
Button previousButton = b;
if (previousButton != currentButton)
...
我理解这背后的逻辑,但遗憾的是在他离开之前我可以询问currentButton变量的声明/使用位置和方式。有人可以对此发光吗?谢谢!
答案 0 :(得分:3)
假设所有按钮都分配了相同的Click
事件,此代码将完全符合您的要求:
Color _activeColor = Color.Red;
private void buttons_Click(object sender, EventArgs e)
{
foreach (Button btn in this.Controls.OfType<Button>()
.Where(b => b.BackColor == _activeColor))
{
btn.BackColor = SystemColors.Control;
}
((Button)sender).BackColor = _activeColor;
}
清除之前有_activeColor
的按钮并将颜色设置为当前按钮。
这是我所需要的(我相信)非常常见的方法。在尝试之前尝试理解此代码,它依赖于Linq。