使用numericUpDowns和windows窗体选择时间长度

时间:2013-03-20 13:03:48

标签: c# winforms

我正在构建一个自动点击应用程序,可以按设定的时间间隔点击鼠标。

enter image description here

注意间隔配置区域。我试图编写一些逻辑,自动简化输入的时间。分钟框上升到60,秒数框上升到60,毫秒框上升到1000.我有一个类来设置处理该逻辑,但它可能不是正确的方法(我是仍然是编程新手)。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AutoClicker {
    public static class TotalTime {
        public static int Interval(NumericUpDown m_, NumericUpDown s_, NumericUpDown ms_) {
            int m = (int)m_.Value;
            int s = (int)s_.Value;
            int ms = (int)ms_.Value;
            int total = 0;

            total = total + (m * 60000);
            total = total + (s * 1000);
            total = total + ms;

            return total;
        }

        public static void ChangeLogic(NumericUpDown m_, NumericUpDown s_, NumericUpDown ms_) {
            int interval = Interval(m_, s_, ms_);

            if (ms_.Value == 1000)
            {
                ms_.Value = 500;
                s_.UpButton();
                ms_.Value = 0;
            }

            if (s_.Value == 60 && m_.Value < 60)
            {
                if (ms_.Value == 0)
                {
                    ms_.Value = 1;
                    s_.Value = 0;
                    m_.UpButton();
                    ms_.Value = 0;
                }
                else
                {
                    s_.Value = 0;
                    m_.UpButton();
                    if (ms_.Value == 1)
                        ms_.DownButton();
                }
            }

            if (ms_.Value == -1)
            {
                ms_.Value = 999;
                s_.DownButton();
            }

            if (s_.Value == -1 & m_.Value > 0)
            {
                s_.Value = 59;
                m_.DownButton();
                if (ms_.Value == 1)
                    ms_.DownButton();
            }
        }
    }
}

每次更新任何框中的值时,都会调用ChangeLogic方法。

选择逻辑中存在很多错误。例如,当按下秒的向上按钮时,程序崩溃。如果秒= 59且分钟= 0,并按下秒向上按钮,则会显示警告“您的时间不能少于250毫秒”,并且会将分钟调整为2。

我真的很困惑。谁能帮我?谢谢!

1 个答案:

答案 0 :(得分:0)

所以,看起来你的目的就是拥有它,这样当你达到毫秒时它会在达到1000时上升到秒,然后当你的秒数达到60时它会累积到你的分钟等等。 / p>

以下是我将如何实现这一目标。首先将所有NUD设置为最大值99999.然后使用看起来像这样的代码:

(注意intervalUpdating变量的使用。这将使你可以按住该按钮,而intervalChanged()方法正在执行时不会再尝试执行它。)

    private void nudSeconds_ValueChanged(object sender, EventArgs e)
    {
        intervalChanged();
    }

    private void nudMilliseconds_ValueChanged(object sender, EventArgs e)
    {
        intervalChanged();
    }

    private bool intervalUpdating = false;
    private void intervalChanged()
    {
        if (intervalUpdating)
        {
            return;
        }

        intervalUpdating = true;

        if (nudMilliseconds.Value >= 1000)
        {
            var val = (int)nudMilliseconds.Value / 1000;
            nudSeconds.Value += val;
            nudMilliseconds.Value = (nudMilliseconds.Value - (val * 1000));
        }

        if (nudSeconds.Value >= 60)
        {
            var val = (int)nudSeconds.Value / 60;
            nudMinutes.Value += val;
            nudSeconds.Value = (nudSeconds.Value - (val * 60));
        }

        intervalUpdating = false;
    }