c# - 如何在c#中禁用按钮颜色

标签 c# .net winforms

我有一组 5 个按钮,它们是我在 winforms 中使用 C# 创建的,如果我单击按钮 1,它应该变为绿色。然后如果单击按钮 2,它应该变为绿色。但是按钮 1 应该变为它的原色。

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            {
                button1.BackColor = Color.Green;
                button2.BackColor = Color.Lavender;
                button3.BackColor = Color.Lavender;
                button4.BackColor = Color.Lavender;
                button5.BackColor = Color.Lavender;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            button1.BackColor = Color.Lavender;
            button2.BackColor = Color.Green;
            button3.BackColor = Color.Lavender;
            button4.BackColor = Color.Lavender;
            button5.BackColor = Color.Lavender;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            button1.BackColor = Color.Lavender;
            button2.BackColor = Color.Lavender;
            button3.BackColor = Color.Green;
            button4.BackColor = Color.Lavender;
            button5.BackColor = Color.Lavender;
        }
    }
}

但是如果我有很多按钮,这段代码会很忙。请帮我解决这个问题。

最佳答案

您可以创建一个事件处理程序并将其分配给所有按钮的 Click 事件:

private void ButtonClickHandler(object sender, EventArgs e)
{
    // iterate over all buttons on form
    foreach (var button in Controls.OfType<Button>())
        button.BackColor = button == sender ? Color.Green : Color.Lavender;
}

正如@CharlesMay 在评论中所述,请注意,此代码将找到作为您表单的直接子项的每个和任何 Button。有一些方法可以避免它:

<强>1。将按钮放在容器中。 例如,创建一个 Panel(比如 myPanel)并将所有这些按钮放在该面板上,然后迭代该面板的控件:

foreach (var button in myPanel.Controls.OfType<Button>())

<强>2。将您的事件按钮存储在私有(private)字段中。这样您根本不需要迭代控件:

private Button _activeButton = null;

private void ButtonClickHandler(object sender, EventArgs e)
{
    // disable previosly active button
    if (_activeButton != null) _activeButton.BackColor = Color.Lavender;
    // set new button
    _activeButton = sender as Button;
    // enable currently active button
    if (_activeButton != null) _activeButton.BackColor = Color.Green;
}

关于c# - 如何在c#中禁用按钮颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56147251/

相关文章:

c# - 如何在不丢失其特定属性的情况下将子实例反序列化为父对象?

c++ - .NET 4、C++、if...else 和 switch() 对性能的影响

c# - 在 .NET 应用程序中检查内存的最佳方法?

c# - 将实体连同子实体一起转换为 DTO

c# - 如果 SQL Server 2005 中有任何列,如何获取最后一个 ID?

c# - 如何指示单行 C# winforms 文本框中有更多文本?

c# - 使用 ClickOnce 创建单个安装文件

c# - 将秒转换为分钟、小时和天

c# - 使用 WinForms GeckoFX 控件从 C# 调用 javascript 函数的推荐方法是什么?

c# - 如何使用 C# 确定列是否存在于 SQL Server CE 表中?