Trying to create stopwatches that will display in textboxes but I am getting a " does not contain a definition" error.
Hello!
What I am looking for:
When my main form loads, I want 15 stopwatches created and 15 textbox.text's to be assigned to each stopwatch. These textboxes will display the current time of each timer after it is started:
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"); }
After a button click I want the corresponding stopwatch to start and the textbox.text to display the current timer. The issue I am running into is under the button clock function:
public void button1_Click(object sender, EventArgs e) { Form1.stopwatch1.Start(); }
Your stopwatches are not properties on the form - they're local variables that are declared within your StopWatchCreate function, so they're only available in that function.
You need to declare them at the class level (the form level in your case). Something like so;
Class Form1{private Stopwatch stopwatch1;private Stopwatch stopwatch2;private Stopwatch stopwatch3; public void StopWatchCreate() { TimerTextBox1.Text = stopwatch1.Elapsed.ToString("hh\\:mm\\:ss"); ... } }
The program will run, but the TimerTextBox1.text does not change?
Chris Stanyon
OK. You're trying to set the textbox once only - when the form first loads.
You won't have started the stopwatch by this time, and even if you had, it won't constantly change the textbox as that only happens when you first load the form.
If you're wanting to constantly update the textbox, then you're going to need to thread the application somehow, and constantly poll the timer for updates. If you don't do this on a thread (background worker etc), then your UI will just lock.
The general approach you probably need is this:
declare the stopwatch at the class level.
start the stopwatch on form load
constantly poll the stopwatch and update the textbox from a background thread.
You need to declare them at the class level (the form level in your case). Something like so;
Open in new window