如何显示像运行序列的标签? C#

时间:2018-01-29 06:44:47

标签: c#

我正在尝试为标签做“运行窗口”。我试图在谷歌找到类似的解决方案,但它让我无处可去。

示例:需要以不同的计数器值显示5个数字。这是我的timer_Start()的宏,因此,计数器每5秒增加一次,这是我的主窗体设置的。

显示:21 23 24 25 26

如果我插入另一个值,例如。 23,应显示最后5个数字。

显示:23 21 23 24 25,

但是,对于我下面的代码,当我插入另一个值时,它们中的所有5个都会改变。如果我更改为if(counter == 2),则在计数器== 3时无法获得更新。

       int counter = 0;
        sql_cmd = sql_conn.CreateCommand();
        sql_cmd.CommandText = "SELECT * FROM temp where id=12";
            try
            {
                sql_conn.Open();
                sql_reader = sql_cmd.ExecuteReader();
                while (sql_reader.Read()) // start retrieve
                {
                    if (counter >= 1)
                    {
                        this.avg1.Text = sql_reader["Temp1"].ToString();

                    }
                }
                sql_conn.Close();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            if (counter >= 2)
            {
                avg2.Text = avg1.Text;                  
            }
            if (counter >= 3)
            {
                avg3.Text = avg2.Text;
            }
            if (counter >=  4)
            {
                avg4.Text = avg3.Text;
            }
            if (counter >=  5)
            {
                avg5.Text = avg4.Text;
                counter = 0;
            }

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

您的问题出在您的一系列if语句中。简单的调试将允许您看到这一点,因此我建议您在下次来这里之前单步执行代码。这样,您的IF语句就可以折射成一种简单的方法供您使用。

private void UpdateLabels(string newValue) {
     avg5.Text = avg4.Text;
     avg4.Text = avg3.Text;
     avg3.Text = avg2.Text;
     avg2.Text = avg1.Text;

     avg1.Text = newValue;
}

这里重要的是您拥有正确的更新订单。原始if语句的顺序不正确,这就是您遇到问题的原因。如果您想了解其工作原理,请在调试器中查看这两组代码,并查看Label.Text属性的更改方式。

现在,您可以在从数据库中获取新值后调用此新方法...在这里,我们可以更新您的计时器代码,以便更好。

 sql_cmd = sql_conn.CreateCommand();
 sql_cmd.CommandText = "SELECT * FROM temp where id=12";

 string newValue = String.Empty;
 try {
      sql_conn.Open();
      sql_reader = sql_cmd.ExecuteReader();
      while (sql_reader.Read()) {
           newValue = sql_reader["Temp1"].ToString();  // store in local variable
      }
 } catch (Exception e) {
      MessageBox.Show(e.Message);
 } finally {
      sql_conn.Close();  // SqlConnection.Close should be in finally block
 }

 UpdateLabels(newValue);

首先不再需要计数器(根据您发布的原始代码,从不需要)。由于Label.Text可以接受空字符串,因此您可以随时复制这些值,无论它是第一次更新还是百万分之一。

其次,您可以将数据库值存储在临时变量中。即使出现数据库错误,也可以更新标签。完成所有数据库操作后,然后使用新值调用UpdateLabels并完成设置。