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