【问题标题】:Dynamically change button back color c#动态改变按钮背景颜色c#
【发布时间】:2013-04-24 09:12:11
【问题描述】:

我想用一个计时器来帮助改变 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

【问题讨论】:

  • 问题是什么?
  • 我有多个背景颜色为绿色的按钮,我想将它们变成红色的查询(这是工作!),但我的查询效果不佳,因为如果表的数量从繁忙变为免费,按钮的颜色不会从红色变为绿色!
  • 您知道表状态何时发生变化,因为您必须自己更新数据库。因此,当您进行更新时,您会更新显示的颜色。所以我看不出问题。数据库状态如何更新?
  • 什么情况下背景色变成黄色?
  • 我认为foreach有问题...

标签: c# sqldatareader


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

【讨论】:

  • 不,我也有同样的问题!
  • 如果您没有在其他地方更新数据库(我假设您是这样),st 将始终返回为 0。因此,当您觉得数据库中的“stampa”列可用时,必须更新它再次。
【解决方案2】:

如果您在 flowLayoutPanel1 代码中的 Panel 中的按钮不起作用

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-30
    • 2015-10-25
    • 1970-01-01
    • 2014-12-26
    • 2011-06-26
    • 2020-08-19
    • 2015-09-09
    • 1970-01-01
    相关资源
    最近更新 更多