动态更改按钮背面颜色c#

时间:2013-04-24 09:12:11

标签: c# sqldatareader

我想用计时器更改有助于按钮的颜色包含在flowLayoutPanel1中。 使用我的查询代码,颜色更改正确,但当查询条件变为false时,我的按钮不会更改其颜色(当我创建它时,我将颜色设置为绿色)。

这是我的代码:

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 个答案:

答案 0 :(得分: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循环以查找特定按钮控件(或您可能正在使用的任何自定义控件),因为它当前将通过所有控件查看控件,无论它们是否为按钮

答案 1 :(得分:0)

如果您的面板内的flowLayoutPanel1代码中的按钮不起作用

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