2014-01-24 66 views
1

我正在爲大學任務製作一款遊戲,並且如果單擊按鈕需要執行某個動作,但它比這更復雜。檢查是否點擊了按鈕陣列

我已經創造了100個按鈕(10×10)一個二維數組來創建一個平鋪,點擊界面(這是該項目短暫的要求,所以我絕對不能更改此方法)。每個按鈕都被隨機分配一個特定的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

見本:http://msdn.microsoft.com/es-es/library/system.web.ui.webcontrols.button.click(v=vs.110).aspx –

回答

2

您可以將同一個事件處理您所有的按鈕是這樣的:

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

而且,在你btnClick你可以得到你按下按鈕,你可以做任何你想要的:

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

你也可以在按鈕的Tag屬性中填入一些狀態if這將有助於找出哪個按鈕被點擊。例如,當您將按鈕添加到數組時,您可以將數組索引填充到那裏 –

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

這看起來很完美,非常感謝! – Abysinian

0

添加單擊事件:

btn.Click += clickHandler; 

然後實現單擊處理:

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