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

时间:2014-01-24 01:25:59

标签: c#

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

我创建了一个包含100个按钮(10x10)的2D数组,以创建一个平铺的可点击界面(这是项目简介的要求,因此我绝对无法更改此方法)。每个按钮被随机分配一个特定的BackgroundImage来组成冒险地图(草,水,树木,矿石等),如果他们有一个特定的BackgroundImage并被点击(树木或矿石),我需要向玩家添加金币他们'收集'该项目的黄金价值。

正在生成按钮数组:

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

我如何能够检测何时单击其中一个按钮并能够根据应用的BackgroundImage进行相应操作?

4 个答案:

答案 0 :(得分:2)

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

btn[x, y].Click += btnClick;

而且,在btnClick中,您可以获得点击按钮,您可以随心所欲:

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

答案 1 :(得分:2)

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

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")
   { ... }
}

答案 2 :(得分:1)

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

在循环中:btn[x, y].Click += ButtonAction_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
 }

答案 3 :(得分:0)

添加点击事件:

btn.Click += clickHandler;

然后实现点击处理程序:

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