我有一组 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/