我正在为一项大学作业开发游戏,如果点击一个按钮需要执行一个动作,但它比这更复杂。
我创建了一个包含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进行相应操作?
答案 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;
}