2015-11-12 25 views
1

當我單擊它時,如何更改數組中標籤的BackColor?由於有多個元素,因此無法爲每個單獨的標籤手動激活每個事件。在Windows窗體中使用C#在點擊時改變背景顏色

for (int i = 0; i < 361; i++) 
     { 
      board[i] = new Label(); 
      board[i].Parent = pictureBox1; 
      board[i].Location = new Point(x, y); 
      board[i].Name = "label" + i; 
      board[i].BackColor = Color.Black; 
      //set size of labels 
      board[i].Size = new Size(30, 30); 
      //initialize click event handler 
      this.board[i].Click += new System.EventHandler(this.labelClick); 

     } 

private void labelClick (object sender, EventArgs e) 
     { 
      foreach (Label i in board) 
      { 
       if (iteration % 2 == 0) 
       { 
        i.BackColor = Color.Black; 
        iteration++; 
       } 
       else if(iteration % 2 == 1) 
       { 
        i.BackColor = Color.White; 
        iteration++; 
       } 
      } 
     } 

回答

1

有可以處理這幾種方法。一種方式是,各線標籤單擊事件到同一事件:

this.label1.Click += new System.EventHandler(this.label_Click); 
this.label2.Click += new System.EventHandler(this.label_Click); 
this.label3.Click += new System.EventHandler(this.label_Click); 

在label_Click事件中,你可以設置每一個標籤或只是你點擊的一個的背景色。

// This will set each label's BackColor to Red. 
private void label_Click(object sender, EventArgs e) 
{ 
    foreach (Label label in labelArray) 
    { 
     label.BackColor = Color.Red; 
    } 
} 

// This will set just the clicked on Label's BackColor to Red. 
private void label_Click(object sender, EventArgs e) 
{ 
    Label label = sender as Label; 
    if (label != null) 
    { 
     label.BackColor = Color.Red; 
    } 
} 
+0

查看我的編輯 – user1925801

+0

@ user1925801根據您的編輯歷史記錄,您似乎可能已經解決了您的問題。不過,我不清楚你的目標結果是什麼。您是否想要使用所有透明標籤加載表單,然後當用戶單擊任何標籤時,所有標籤都會變成棋盤圖案? –

+0

問題已解決。我有我的for循環的東西,不應該在那裏(沒有圖片)。也不知道透明真的意味着父元素的背景顏色。因此,我擺脫了作爲背景圖像的圖片框,而是設置了表單本身的背景圖像,然後將標籤設置爲backcolor = transparent,並獲得了我的解決方案。 – user1925801

0
var labels = new[] 
{ 
    // labels here 
}; 

foreach (var label in labels) 
{ 
    label.Click += (sender, args) => 
     { 
      var lbl = sender as Label; 
      Debug.Assert(lbl != null); 
      lbl.BackColour = Colors.Pink; 
     }; 
}