2012-12-19 293 views
2

我正在嘗試製作8x8按鈕的數組,並且到目前爲止它的工作原理如下。 現在我偶然發現了一個問題。 我希望按鈕的顏色(背景顏色)在點擊時改變。再次單擊時更改爲不同的顏色。單擊時更改按鈕顏色(多次單擊/顏色)

這是我到目前爲止的代碼:

namespace WindowsFormsApplication2 
{ 
    public partial class Form1 : Form 
    { 
     Button[,] btn = new Button[8,8]; 

     public Form1() 
     { 
      InitializeComponent(); 

      for (int x = 0; x < btn.GetLength(0); x++) 
      { 
       for (int y = 0; y < btn.GetLength(1); y++) 
       { 
        btn[x,y] = new Button(); 
        btn[x,y].SetBounds(40 * x, 40 * y, 40, 40); 
        btn[x,y].Click += new EventHandler(this.btnEvent_click); 
        Controls.Add(btn[x, y]); 
        btn[x,y].BackColor = Color.Black; 
       } 
      } 

      /* 
      btn.Click += new EventHandler(this.btnEvent_click); 
      btn[x,y].Text = Convert.ToString(x+","+y); 
      Controls.Add(btn); 
      btn[x,y].Click += new EventHandler(this.btnEvent_click); 
      */ 
     } 

     private void form1_load(object sender, EventArgs e) 
     { 

     } 

     void btnEvent_click(object sender, EventArgs e) 
     { 
      (Control)sender).BackColor = Color.Red; 
     } 
    } 
} 

到目前爲止,我可以只顏色變爲紅色,並且我已經試過多個if和for語句來改變顏色的第二次。

任何人都可以幫我嗎?

+0

你可以顯示這些if/for語句的代碼嗎? – ryadavilli

回答

3

嗨臨時,你可以使用下面的解決方案:

void btnEvent_click(object sender, EventArgs e) 
     { 
      Control ctrl = ((Control)sender); 
      switch (ctrl.BackColor.Name) 
      { 
       case "Red": 
        ctrl.BackColor = Color.Yellow; 
        break; 
       case "Black": 
        ctrl.BackColor = Color.White; 
        break; 
       case "White": 
        ctrl.BackColor = Color.Red; 
        break; 
       case "Yellow": 
        ctrl.BackColor = Color.Purple; 
        break; 
       default: 
        ctrl.BackColor = Color.Red; 
        break; 
      } 
     } 

我知道可以有更好的解決方案,但同時你可以用這個......你可以根據需要在開關說明中添加更多的顏色

+0

謝謝,它的工作! 你有什麼想法我可以點擊一些按鈕並改變顏色。 然後它記得按鈕的顏色(如保存文件) 我需要它來配置我的led立方體 – user1915442

+0

對不起,我不明白你的問題,你可以請詳細解釋它 –

+0

那麼,如果我運行程序並點擊一些按鈕(所以其中一些是綠色的,另一些是紅色的)。我需要「保存」該佈局。 – user1915442

0

你試過類似的東西嗎?

void btnEvent_click(object sender, EventArgs e) 
    { 
     if ((Control)sender).BackColor != Color.Red) 
      (Control)sender).BackColor = Color.Red; 
     else 
      (Control)sender).BackColor = Color.Green; 
    } 
0

試試吧..其工作...

裏面Button1的Click事件:

Random randomGen = new Random(); 
KnownColor[] names = (KnownColor[])Enum.GetValues(typeof(KnownColor)); 
KnownColor randomColorName = names[randomGen.Next(names.Length)]; 
Color randomColor = Color.FromKnownColor(randomColorName); 
button1.BackColor = randomColor; 
0

可以讓百達繼承,則該按鈕類櫃檯給它添加一個類比如點擊的次數,然後在每次點擊時增加該值,然後根據該點擊更改顏色。

1

您可以使用Color.FromArgb(int)方法和Random類。請看下圖:

Random rnd = new Random(); 

//Alpha set allways 255 
Color.FromArgb(255, rnd.Next(255), rnd.Next(255), rnd.Next(255)); 

//Or Completly random 
Color.FromArgb(rnd.Next()); 
0

你可以嘗試這樣的事情,如果你通過一組固定的顏色要「循環」:

void btnEvent_click(object sender, EventArgs e) 
{ 
    var button = (Button)sender; 
    switch(button.BackColor) 
    { 
     case Color.Black: { button.BackColor= Color.Red;} break; 
     case Color.Red: { button.BackColor= Color.Blue;} break; 
     case Color.Blue: { button.BackColor= Color.Green;} break; 
     // and so on ... don't forget the default clause, just in case 
     default: { button.BackColor= Color.Black;} break; 
    } 
} 
1

你可以做一個新的類,塔從按鍵繼承和處理內部顏色的變化,這樣的事情:

class TwoColorButton : Button 
{ 
    private int stateCounter = 0; 
    private Color[] states = new Color[] { Color.Black, Color.Red }; 

    public TwoColorButton() 
     : base() 
    { 
     this.BackColor = states[stateCounter]; 
     this.Click += this.clickHandler; 
    } 

    protected void clickHandler(object sender, EventArgs e) 
    { 
     stateCounter = stateCounter == 0 ? 1 : 0; 
     this.BackColor = states[stateCounter]; 
    } 
}