winforms 如何在clickevent未执行时将iconbutton更改为默认背景色?

jv4diomz  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(101)

我的窗体中有20个图标按钮。当执行clickevent时,我想改变按钮(背景色、前景色、图标色),其余的按钮应该恢复为默认颜色。

public void btn1()
        {
            foreach (Control c in this.Controls)
            {
                if (c is Button)
                {
                    (c as Button).ForeColor = Color.White;
                    (c as Button).BackColor = Color.FromArgb(46, 51, 73);

                }
            }
        }
uhry853o

uhry853o1#

您可以让每个按钮都侦听相同的Click事件,并执行一些条件逻辑来实现这一点。
首先,使每个按钮都引用同一个Click事件。您可以通过在窗体设计器中单击按钮,然后在“属性”窗口中单击 lightning 图标(事件图标),将Click事件更改为所需的方法来完成此操作:

然后,让您的事件方法执行类似以下的动作:

public void ChangeButtonColors(object sender, EventArgs e)
{
    //change the color of the clicked button to desired color
    Button clickedButton = (System.Windows.Forms.Button)sender;
    clickedButton.BackColor = Color.Red;

    //change all other buttons to defualt color
    foreach (Control c in this.Controls)
    {
        if (c is Button && c != clickedButton)
        {
            c.BackColor = Color.Green;
        }
    }
}

这会取得sender的型别(在本例中为单击的按钮),并设置其BackColor属性。然后,foreach循环遍历窗体中的所有控件,检查列表中的当前项是否为按钮,是否不是单击的按钮,它将更改BackColor属性。显然,您可以更改单击的按钮以及foreach中其他按钮的其他属性。
如果操作正确,其行为应该如下:

xsuvu9jc

xsuvu9jc2#

这就是RadioButton的用处。只需将它的Appearance设置为Button,这样它看起来就像一个普通按钮,但实际上却可以用作单选按钮:单击该按钮将取消选中所有其他按钮。只有最后单击的按钮的Checked属性为true

相关问题