首页 > 解决方案 > 如何将 Click 事件动态附加到多个按钮?

问题描述

我正在尝试用 C# 开发基诺游戏,所以我有 80 个按钮,每个按钮都有 1-80 的数字,如下所示:

基诺游戏

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

我尝试在数组上添加按钮并像这样循环遍历数组:

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


标签: c#winformsbutton

解决方案


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

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;
            };
        }
    }
}

推荐阅读