2013-04-24 97 views
-2

我想用定時器更改幫助按鈕的顏色包含在flowLayoutPanel1中。 用我的查詢代碼的顏色變化的權利,但是當查詢的條件變爲false時,我的按鈕不會改變他的顏色(當我創建它時,我將顏色設置爲綠色)。動態更改按鈕背色c#

這是我的代碼:

private void timer1_Tick(object sender, EventArgs e) 
{ 
    int t = 0; 
    int st = 0; 
    try 
    { 
     using (SqlConnection cn =new SqlConnection(VisualizzaOrdini.Form1.cnstr)) 
     { 
      string strSql = "SELECT tavolo,stampa FROM Ordini"; 
      SqlCommand cmd = new SqlCommand(strSql, cn); 
      cn.Open(); 
      using (SqlDataReader dr = cmd.ExecuteReader()) 
      { 
       while (dr.Read()) 
       { 
        t = (int)dr["tavolo"]; 
        st = (int)dr["stampa"]; 
        foreach (Control c in flowLayoutPanel1.Controls) 
        { 
         if (st == 0) 
         { 
          if (c.Name == Convert.ToString(t)) 
          { 
           c.BackColor = Color.Red; 
          } 
         } 
         else if (c.Name == Convert.ToString(t)) 
         { 
          c.BackColor = Color.Green; 
         } 
        } 
       } 
      } 
      cn.Close(); 
     } 
    } 
} 
catch (Exception) 
{ 
} 

我需要在一家餐館程序來實現這一點。如果它是忙碌的,我想將表格變成紅色,如果它是免費的,則變成綠色。

這是一個圖像:

https://docs.google.com/file/d/0B-nMmszaCz8EVE9JdjlISHg1aDA/edit?usp=sharing

+2

問題是什麼? – MoonKnight 2013-04-24 09:14:31

+0

我有多個帶背景綠色的按鈕,查詢我想將它們變成紅色(這是工作!),但我的查詢不能正常工作,因爲如果表的數字從忙變爲空閒,按鈕不會將其顏色從紅色變爲綠色! – Mikykly 2013-04-24 09:17:33

+0

您知道表狀態何時發生變化,因爲您必須自己更新數據庫。所以,當你進行更新時,你需要更新顯示的顏色。所以我沒有看到問題。數據庫狀態如何更新? – MoonKnight 2013-04-24 09:17:44

回答

0
foreach (Button button in flowLayoutPanel1.Controls) 
{  
    if (button.Name == Convert.ToString(t)) 
    { 
     if (st == 0) 
     { 
      button.BackColor = Color.Red; 
     }      
     else 
     { 
      button.BackColor = Color.Green; 
     } 
    } 
} 

此外,改變foreach循環來尋找特定的按鈕控制(或者你也可以使用自定義的控制),因爲它目前會去翻全部控件無論它們是否是按鈕

+0

不,我有同樣的問題! – Mikykly 2013-04-24 09:53:06

+0

如果你沒有更新其他地方的數據庫(我認爲你是),st總會回到0. 因此,當你感覺到數據庫中的「stampa」列再次變爲可用時,必須更新數據庫中的「stampa」列。 – Lojko 2013-04-24 09:57:58

0

如果你的按鈕在Panel裏面的flowLayoutPanel1代碼不會工作

foreach (Control c in flowLayoutPanel1.Controls) 
        { 
         if (c is Panel) 
         { 
          //iterate through panel 
         } 
        }