Отображение текущего времени секундомера в TextBox на C # - PullRequest
0 голосов
/ 01 ноября 2018

Что я ищу:

Когда моя основная форма загружается, я хочу создать 15 секундомеров и 15 текстовых.текстов, которые будут назначены для каждого секундомера. В этих текстовых полях будет отображаться текущее время каждого таймера после его запуска:

       public void Form1_Load(object sender, EventArgs e)
    {
        StopWatchCreate();
    }

    public void StopWatchCreate()
    {
        Stopwatch stopwatch1 = new Stopwatch();
        TimerTextBox1.Text = stopwatch1.Elapsed.ToString("hh\\:mm\\:ss");
        Stopwatch stopwatch2 = new Stopwatch();
        TimerTextBox2.Text = stopwatch2.Elapsed.ToString("hh\\:mm\\:ss");
        Stopwatch stopwatch3 = new Stopwatch();
        TimerTextBox3.Text = stopwatch3.Elapsed.ToString("hh\\:mm\\:ss");
        Stopwatch stopwatch4 = new Stopwatch();
        TimerTextBox4.Text = stopwatch4.Elapsed.ToString("hh\\:mm\\:ss");
        Stopwatch stopwatch5 = new Stopwatch();
        TimerTextBox5.Text = stopwatch5.Elapsed.ToString("hh\\:mm\\:ss");
        Stopwatch stopwatch6 = new Stopwatch();
        TimerTextBox6.Text = stopwatch6.Elapsed.ToString("hh\\:mm\\:ss");
        Stopwatch stopwatch7 = new Stopwatch();
        TimerTextBox7.Text = stopwatch7.Elapsed.ToString("hh\\:mm\\:ss");
        Stopwatch stopwatch8 = new Stopwatch();
        TimerTextBox8.Text = stopwatch8.Elapsed.ToString("hh\\:mm\\:ss");
        Stopwatch stopwatch9 = new Stopwatch();
        TimerTextBox9.Text = stopwatch9.Elapsed.ToString("hh\\:mm\\:ss");
        Stopwatch stopwatch10 = new Stopwatch();
        TimerTextBox10.Text = stopwatch10.Elapsed.ToString("hh\\:mm\\:ss");
        Stopwatch stopwatch11 = new Stopwatch();
        TimerTextBox11.Text = stopwatch11.Elapsed.ToString("hh\\:mm\\:ss");
        Stopwatch stopwatch12 = new Stopwatch();
        TimerTextBox12.Text = stopwatch12.Elapsed.ToString("hh\\:mm\\:ss");
        Stopwatch stopwatch13 = new Stopwatch();
        TimerTextBox13.Text = stopwatch13.Elapsed.ToString("hh\\:mm\\:ss");
        Stopwatch stopwatch14 = new Stopwatch();
        TimerTextBox14.Text = stopwatch14.Elapsed.ToString("hh\\:mm\\:ss");
        Stopwatch stopwatch15 = new Stopwatch();
        TimerTextBox15.Text = stopwatch15.Elapsed.ToString("hh\\:mm\\:ss");
    }

После нажатия кнопки я хочу запустить соответствующий секундомер и textbox.text для отображения текущего таймера. Проблема, с которой я сталкиваюсь, связана с функцией часов:

public void button1_Click(object sender, EventArgs e)
    {
        Form1.stopwatch1.Start();
    }

но секундомер1 выдает ошибку: «TaskTracker.Form1» не содержит определения для «секундомер1»

Спасибо за вашу помощь с этим!

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Во-первых, как говорится в комментариях, все переменные секундомера должны быть полями Form, а не локальными переменными, какими они являются сейчас.

Сделай так:

public partial Form1: Form
{
      Stopwatch stopwatch1 = new Stopwatch();
      Stopwatch stopwatch2 = new Stopwatch();
      // etc

Затем, чтобы отобразить текущее значение секундомеров, вам потребуется Timer Компонент, просто перетащите Timer в форму.

Затем напишите обработчик событий для Timer, который выглядит следующим образом:

private void Timer1_Tick(object sender, EventArgs e)
{
        TimerTextBox1.Text = stopwatch1.Elapsed.ToString("hh\\:mm\\:ss");
        TimerTextBox2.Text = stopwatch2.Elapsed.ToString("hh\\:mm\\:ss");
        // etc
}

Timer должен срабатывать, вероятно, один раз в секунду (установите Interval на 1000).

Теперь в текстовых полях будет отображаться значение секундомеров каждую секунду.

0 голосов
/ 01 ноября 2018

Возможно, вы, кажется, хотите этого.

С небольшими изменениями в этом коде вы можете создавать то, что хотите.

enter image description here

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

namespace WindowsFormsApp23
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        Timer t1;

        Stopwatch s1;
        Stopwatch s2;


        private void Form1_Load(object sender, EventArgs e)
        {
            s1 = new Stopwatch();
            s2 = new Stopwatch();

            t1 = new Timer();
            t1.Interval = 1;
            t1.Tick += T1_Tick;
            t1.Start();
        }

        private void T1_Tick(object sender, EventArgs e)
        {
            textBox1.Text = s1.ElapsedMilliseconds.ToString();
            textBox2.Text = s2.ElapsedMilliseconds.ToString();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            s1.Start();
            s2.Start();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            s1.Stop();
            s2.Stop();
        }
    }
}
...