【问题标题】:How do i convert from milliseconds to seconds units to be shown in a Label?如何将毫秒单位转换为秒单位以显示在标签中?
【发布时间】:2013-10-24 21:10:29
【问题描述】:

我有这个代码:

private void Form1_MouseWheel(object sender, MouseEventArgs e)
        {
            if (leave == true)
            {
                if (e.Delta > 0)
                {
                    if (timer1.Interval < 5000)
                    {
                        timer1.Interval += 1000;
                        label2.Text = (timer1.Interval/1000).ToString();
                    }

                }
                else
                {
                    if (timer1.Interval == 1000)
                    {
                        timer1.Interval -= 100;
                        label2.Text = (timer1.Interval / 1000).ToString();
                    }
                }
            }
        }

设计器中的原始 timer1 间隔设置为 1000 毫秒。 在鼠标滚轮事件中,我做到了它会在几秒钟内显示在 label2 中。 事实上,当我向上移动鼠标滚轮时,它会减慢计时器并在几秒钟内显示它 1 2 3 4 5

问题在于我想要的第二部分,当它达到 1 秒或 1000 毫秒时,如果我将其保持向下,它将以 100 显示单位并将 timer1.interval 更改为 100 单位。

所以在 label2 中,如果它是 1 秒,那么现在我将看到 900 800 700 600 500 到 100。 并且 timer1 间隔也应该更改为 900 毫秒 800 700 600 直到 100。

当它达到 100 时就停下来,不要一直低于 100。

问题出在这部分:

if (timer1.Interval == 1000)
                    {
                        timer1.Interval -= 100;
                        label2.Text = (timer1.Interval / 1000).ToString();
                    }

它根本不工作。

编辑**

我现在的代码:

if (leave == true)
            {
                if (e.Delta > 0)
                {
                    if (timer1.Interval < 5000)
                    {
                        timer1.Interval += 1000;
                        label2.Text = (timer1.Interval / 1000).ToString();
                    }

                }
                else
                {
                     if (timer1.Interval > 1000) {
                         timer1.Interval -= 1000;
                         label2.Text = (timer1.Interval / 1000).ToString();
                     }

                    else

                    if (timer1.Interval <= 1000 && timer1.Interval > 100)
                    {
                        timer1.Interval -= 100;
                        label2.Text = (timer1.Interval / (double)1000).ToString();
                    }
                }
            }

但现在如果我在 5 秒(5000 毫秒),现在我将轮子向下移动,计数 5 4 3 2 1 0 并停在 0

它不像以前那样显示在 1 ...0.9 0.8 0.7 以下。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    您应该将检查更改为:

    if (timer1.Interval <= 1000 )
    

    计时器间隔只会在1000 一次,然后您将其减去 100 并使其变为 900。通过检查值 &lt;= 1000 它将继续为较低的值工作。

    您可能还想检查间隔是否过低并将检查扩展为

    if (timer1.Interval <= 1000 && timer1.Interval > 100)
    

    要显示小于 1 秒的时间,您需要确保除以浮点类型,否则只会显示 0。除以整数会导致任何分数被截断

    label2.Text = (timer1.Interval / (double)1000).ToString();
    

    Interval 高于 1000 时,要减少它,您需要额外检查。例如

    if (timer1.Interval > 1000) {
        timer.Interval -= 1000;
    } else if ( timer.Interval <= 1000 && timer.Interval > 100 )
        timer.Interval -= 100;
    }
    

    【讨论】:

    • 史蒂夫您的更改适用于底部,但一旦我达到 1 秒及以上,我就无法再次下来。我能得到的最大值是上部的 5 秒(5000 毫秒)。但如果我在 2 3 4 或 5 秒时,我不能再把它改下来。为什么停留在1000ms以上的间隔?上部 timer1.Interval
    • @DoronMuzar 仅当区间
    • 史蒂夫请看我的问题几秒钟,用当前代码更新它,就像我在你的示例中所做的那样。但是现在,如果我在 5 秒内并向下移动,它正在执行 5 4 3 2 1 0 并在 0 上保持/停止。它不会像以前那样从 1 0.9 0.8 0.7 0.6 开始。
    • @DoronMuzar 我建议调试它,看看哪里不太对。
    猜你喜欢
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 2012-03-26
    相关资源
    最近更新 更多