C# - 尝试为多个按钮创建“选定”状态

时间:2015-03-12 20:39:00

标签: c#

我想要做的是创建一个包含多个按钮的菜单,当用户点击其中一个按钮时,所选按钮标记将存储在一个变量中,该按钮的背景颜色会突出显示。当用户单击另一个按钮时,先前存储的变量将与新变量进行比较,如果不同,则会将先前按下的按钮的背景颜色更改回正常。这就是我到目前为止所做的:

   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变量的声明/使用位置和方式。有人可以对此发光吗?谢谢!

1 个答案:

答案 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