1

設定した時間間隔でマウスをクリックする自動クリッカー アプリケーションを構築しています。

ここに画像の説明を入力

間隔構成エリアに注意してください。入力された時間を自動的に単純化するロジックを書き込もうとしました。分ボックスは 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 に調整されます。

私は本当に混乱しています。誰でも私を助けることができますか?ありがとう!

4

1 に答える 1

0

したがって、ミリ秒を上げると1000に達すると秒にロールアップし、秒が60に達すると分にロールアップするなどの意図があるようです.

これが私がこれを達成する方法です。最初にすべての 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;
    }
于 2013-03-20T15:48:43.690 に答える