如何将Click事件动态地附加到多个按钮上?

问题描述 投票:0回答:1

我想用C#语言开发一个基诺游戏,所以我有80个按钮,每个按钮都有1-80的数字,像这样。

KenoGame

所以我想做的是,每个用户应该选择10个数字(不能少,也不能多),当一个按钮被点击时,按钮的背景颜色就会变成绿色,但我想知道如何在不调用每个按钮的事件的情况下做到这一点。这些数字应该保存在数据库中。

我试过在数组上添加按钮,然后像这样在数组中循环。

var buttons = new[] { button1, button2, button3, button4, button5, ..... };
foreach (var button in buttons)
{
    if (button.Focused)
    {
        button.BackColor = Color.Green;
    }
}


c# winforms button
1个回答
2
投票

你可以为每个按钮分配相同的事件处理程序。

foreach (var button in buttons) {
    button.Click += (sender, e) => {  
        ((Button)sender).BackColor = Color.Green;
    };
}

如果你想添加到表单上的所有按钮, 你可以在表单构造函数中调用这个。

int counter = 0;
public Form1()
{
    InitializeComponent();
    foreach (var c in Controls)
    {
        if (c is Button)
        {
            ((Button)c).Click += (sender, e) =>
            {
                if (counter >= 10) return;
                Button b = (Button)sender;
                b.BackColor = Color.Green;
                counter += 1;
            };
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.