2013-04-24 93 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 
         } 
        }