C# 检查是否单击了数组中的按钮

C# 检查是否单击了数组中的按钮,c#,C#,我正在为一个大学作业做一个游戏,如果点击一个按钮,我需要执行一个动作,但它比这个更复杂 我已经创建了一个由100个按钮(10x10)组成的二维数组,以创建一个平铺的、可点击的界面(这是项目简介的要求,所以我绝对不能更改此方法)。每个按钮随机分配一个特定的背景图像,以组成一个冒险地图(草、水、树、矿石等),如果它们有特定的背景图像并被点击(树或矿石),我需要为玩家的黄金值添加黄金,以便他们“收集”物品 正在生成按钮数组,如下所示: Button[,] btn = new Button[10, 10

我正在为一个大学作业做一个游戏,如果点击一个按钮,我需要执行一个动作,但它比这个更复杂

我已经创建了一个由100个按钮(10x10)组成的二维数组,以创建一个平铺的、可点击的界面(这是项目简介的要求,所以我绝对不能更改此方法)。每个按钮随机分配一个特定的背景图像,以组成一个冒险地图(草、水、树、矿石等),如果它们有特定的背景图像并被点击(树或矿石),我需要为玩家的黄金值添加黄金,以便他们“收集”物品

正在生成按钮数组,如下所示:

Button[,] btn = new Button[10, 10];
for (int x = 0; x < 10; x++)
{
    for (int y = 0; y < 10; y++)
    {
        btn[x, y] = new Button();

        btn[x, y].SetBounds((x * 50) + 8, (y * 50) + 16, 50, 50);
        btn[x, y].Name = x + "," + y;
        Controls.Add(btn[x, y]);
    }
}
按钮[,]btn=新按钮[10,10];
对于(int x=0;x<10;x++)
{
对于(int y=0;y<10;y++)
{
btn[x,y]=新按钮();
btn[x,y].立根((x*50)+8,(y*50)+16,50,50);
btn[x,y].Name=x+“,”+y;
添加(btn[x,y]);
}
}

我如何检测这些按钮中的一个按钮何时被单击,并根据应用于它的背景图像进行相应操作?

您可以将相同的事件处理程序附加到所有按钮,如下所示:

btn[x, y].Click += btnClick;
而且,在您的
b单击
,您可以点击您的按钮,您可以做任何您想做的事情:

public void btnClick(object sender, EventArgs e)
{
   Button myButton = sender as Button;
   myButton.BackgroundImage = ...
}

您可以将相同的事件处理程序附加到所有按钮,如下所示:

btn[x, y].Click += btnClick;
而且,在您的
b单击
,您可以点击您的按钮,您可以做任何您想做的事情:

public void btnClick(object sender, EventArgs e)
{
   Button myButton = sender as Button;
   myButton.BackgroundImage = ...
}

向数组中的所有按钮注册OnClick事件。然后将
object sender
参数强制转换为按钮对象,找出该按钮上的背景图像并进行相应处理

在循环中:
btn[x,y]。单击+=按钮操作\u OnClick

处理程序:

private void ButtonAction_OnClick(object sender, EventArgs e)
{
    Button button = sender as Button;
    Image bImage = button.BackgroundImage;
    if(bImage.Tag.Equals(...))
    {
        //do something
    }
    else //do something else
 }

向数组中的所有按钮注册OnClick事件。然后将
object sender
参数强制转换为按钮对象,找出该按钮上的背景图像并进行相应处理

在循环中:
btn[x,y]。单击+=按钮操作\u OnClick

处理程序:

private void ButtonAction_OnClick(object sender, EventArgs e)
{
    Button button = sender as Button;
    Image bImage = button.BackgroundImage;
    if(bImage.Tag.Equals(...))
    {
        //do something
    }
    else //do something else
 }

可用的选项之一是为所有按钮分配一个公共事件处理程序,并用其背景类型(例如,在标记中)标记每个按钮。然后,在该处理程序中,您可以检查单击的按钮类型,并根据需要继续:

btn[x, y].Click += btnClick;
btn[x, y].Tag = "..."; //Based on background

public void btnClick(object sender, EventArgs e)
{
   Button myButton = sender as Button;
   if (myButton.Tag == "Mountain")
   { ... }
   else if (myButton.Tag == "Forest")
   { ... }
}

可用的选项之一是为所有按钮分配一个公共事件处理程序,并用其背景类型(例如,在标记中)标记每个按钮。然后,在该处理程序中,您可以检查单击的按钮类型,并根据需要继续:

btn[x, y].Click += btnClick;
btn[x, y].Tag = "..."; //Based on background

public void btnClick(object sender, EventArgs e)
{
   Button myButton = sender as Button;
   if (myButton.Tag == "Mountain")
   { ... }
   else if (myButton.Tag == "Forest")
   { ... }
}
添加单击事件:

btn.Click += clickHandler;
然后实现单击处理程序:

void clickHandler(object sender, EventArgs e)
{
    ((Button)sender).Background = Brushes.LightBlue;
}
添加单击事件:

btn.Click += clickHandler;
然后实现单击处理程序:

void clickHandler(object sender, EventArgs e)
{
    ((Button)sender).Background = Brushes.LightBlue;
}

看这个:看这个:你也可以在按钮的Tag属性中填充一些状态,如果这有助于确定点击了哪个按钮。例如,当您将按钮添加到数组中时,您可以在其中填充数组索引,您还可以在按钮的标记属性中填充一些状态,如果这有助于确定单击了哪个按钮。例如,当您将按钮添加到数组中时,您可以在其中填充数组索引