button.PerformClick co minutę

0

Hej Witajcie!
Dziś nasunęło mi się pytanie, w jaki sposób wykonać ponowne wyliczenie, wykonując polecenia za pomocą buttona.
Sekwencja miałaby się wykonywać, powiedzmy co 1minutę - automatycznie.

Obliczenie wykonania planu w zależności od pozostałego czasu.
Czas całkowity to 12h tyle ile trwa cała zmiana. Plan to nic innego jak ilość sztuk do wykonania targetu.
Wyliczenie to nie problem ponieważ już się dokonuje, pozostała tylko kwestia wykonywania co interwał.
Interwał 1s to ponowne kliknięcie buttona. Główny mój problem.

Aby całość miała przejrzystą instrukcję musiałbym jeszcze wykonać automatyczne ustalanie początku zmiany:
jeżeli zegar systemowy uzyska godzinę 06:00:00 to jest pierwsza zmiana natomiast jeżeli uzyska 18:00:00 to będzie zmiana druga.
Początki ustalenia odliczania.

Na zdjęciu zaznaczyłem :

  1. Początek zmiany - tu ustawiamy ręcznie, chciałbym aby automatycznie po przekroczeniu 06:00:00 oraz 18:00:00 samoczynnie pozostawał na wybranej godzinie. (DateTimePicker1)
  2. Button dzięki któremu liczymy prognozowany wynik na koniec zmiany tj. 12h (btn_przewidywany)
  3. To Aktualna godzina systemowa (dateTimePicker2)

A tak wygląda cały kod:

private void btn_przewidywany_Click(object sender, EventArgs e)
        {
            try
            {
                    DateTime timeStart = dateTimePicker1.Value;
                    DateTime timeStop = dateTimePicker2.Value;
                    timeStop = DateTime.Now;

                    TimeSpan difference = timeStop - timeStart;
                    lab_czasACTUAL.Text = DateTime.Now.ToString();

                    double hour = difference.TotalHours;
                    lab_hour.Text = ((int)hour).ToString();  /* RZUTOWANIE DO INT */
                    lab_hour.Text = Math.Round(hour).ToString();
                    lab_hour.Text = hour.ToString("0" + " h");

                    //lab_szacowanyTarget.Text = (hour * 60 * 60).ToString();
                    double Szacowany = (hour * 60 * 60);
                    lab_szacowanyTarget.Text = ((int)Szacowany).ToString();  /* RZUTOWANIE DO INT */
                    lab_szacowanyTarget.Text = Szacowany.ToString("0" + " sek.");

                    lab_czasPozostaly.Text = (float.Parse(tb_czasDostepny.Text) - (hour * 60 * 60)).ToString();

                    double CzasPozostaly = (float.Parse(lab_czasPozostaly.Text) / 60);
                    lab_czasPozostalyMin.Text = ((int)CzasPozostaly).ToString();  /* RZUTOWANIE DO INT */
                    lab_czasPozostalyMin.Text = CzasPozostaly.ToString("0");

                    double praca = (float.Parse(tb_peelingAKT.Text) + (float.Parse(lab_czasPozostalyMin.Text) - float.Parse(tb_sumaPrzerw.Text)) * float.Parse(lab_target_01.Text));
                    lab_czasPracyGodz.Text = ((int)praca).ToString();  /* RZUTOWANIE DO INT */
                    lab_czasPracyGodz.Text = praca.ToString("0" + " szt.");

                    //Czas do końca uzyskany z przezbrojenia
                    //lab_PrzezbrojenieCzas.Text = (float.Parse(lab_czasPozostaly.Text) - (float.Parse(cb_przezbrojenia.Text) / 60)).ToString();
                    double PrzezbrojenieCzas = (float.Parse(lab_czasPozostaly.Text) - (float.Parse(cb_przezbrojenia.Text) / 60));
                    lab_PrzezbrojenieCzas.Text = ((int)PrzezbrojenieCzas).ToString();  /* RZUTOWANIE DO INT */
                    lab_PrzezbrojenieCzas.Text = Math.Round(PrzezbrojenieCzas).ToString();
                    lab_PrzezbrojenieCzas.Text = PrzezbrojenieCzas.ToString("0");

                    label87.Text = lab_czasPracyGodz.Text;
            }
            catch
            {
                    MessageBox.Show("Pole nie może pozostać puste", "Uwaga", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            }
0

Za bardzo nie rozumiem o co Ci chodzi, ale wydaje mi się/podejrzewam/domyślam się, że ustawienie timera, który będzie się odpalał cyklicznie i wywoływał funkcje obsługującą wciśnięcie klawisza będzie tym, czego Tobie potrzeba.

0

Hej. Tak Timer ok. Tylko słabo ogarniam jego użycie.
Wiem jak wykonać odliczanie ale nie potrafię zrobić sekwencji powtarzania co minutę

0

Ale co jest trudnego w ustawieniu interwału
Timer timer = new Timer(60000);

1
    Timer timer = new Timer();

    timer.Interval = 60000;

    timer.Tick += timer_Tick;

    timer.Start();

void timer_Tick(object sender, EventArgs e)
{
    Przewidywany();
}

private void btn_przewidywany_Click(object sender, EventArgs e)
{
    Przewidywany(); //jeżeli chcesz zostawić pod przyciskiem
}

private void Przewidywany()
{
    //twoj kod
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0