Ich habe eine Frage zu Windows-Formularen. Ich habe diesen Countdown gemacht, der auf dem Code und den Bildern unten zu sehen ist. Ich habe ein Problem damit. Wenn ich den ersten Countdown mit Start und Stopp starte, läuft es so, wie es sollte, mit Stunden, Minuten und Sekunden, aber sobald ich den zweiten Countdown starte, setzt der erste die Werte auf die Werte zurück, die in den zweiten eingegeben wurden. Und es überspringt eine Sekunde bei beiden. Also geht es von Sekunde 53 auf 51 auf der ersten und von 52 auf 50 auf der anderen Seite. Hat jemand von euch irgendwelche Ideen, wie man dieses Problem löst und sie unabhängig macht von einander, die sie jetzt eindeutig sind ??Mehrere Timer scheint nicht auf Windows-Formulare zu arbeiten?
Vielen Dank im Voraus!
namespace newtime
{
public partial class Form1 : Form
{
private int h;
private int m;
private int s;
public Form1()
{
InitializeComponent();
}
private void btnStart1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
textBox1.Text = "0";
}
if (textBox2.Text == "")
{
textBox2.Text = "0";
}
if (textBox3.Text == "")
{
textBox3.Text = "0";
}
h = Convert.ToInt32(textBox1.Text);
m = Convert.ToInt32(textBox2.Text);
s = Convert.ToInt32(textBox3.Text);
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
s = s - 1;
if (s == -1)
{
m = m - 1;
s = 59;
}
if (m == -1)
{
h = h - 1;
m = 59;
}
if (h == 0 && m == 0 && s == 0)
{
timer1.Stop();
MessageBox.Show("Times up!", "Timer");
}
string hh = Convert.ToString(h);
string mm = Convert.ToString(m);
string ss = Convert.ToString(s);
textBox1.Text = hh;
textBox2.Text = mm;
textBox3.Text = ss;
}
private void btnStop1_Click(object sender, EventArgs e)
{
timer1.Stop();
}
private void btnStart2_Click(object sender, EventArgs e)
{
if (textBox4.Text == "")
{
textBox4.Text = "0";
}
if (textBox5.Text == "")
{
textBox5.Text = "0";
}
if (textBox6.Text == "")
{
textBox6.Text = "0";
}
h = Convert.ToInt32(textBox4.Text);
m = Convert.ToInt32(textBox5.Text);
s = Convert.ToInt32(textBox6.Text);
timer2.Start();
}
private void timer2_Tick(object sender, EventArgs e)
{
s = s - 1;
if (s == -1)
{
m = m - 1;
s = 59;
}
if (m == -1)
{
h = h - 1;
m = 59;
}
if (h == 0 && m == 0 && s == 0)
{
timer2.Stop();
MessageBox.Show("Times up!", "Timer");
}
string hh = Convert.ToString(h);
string mm = Convert.ToString(m);
string ss = Convert.ToString(s);
textBox4.Text = hh;
textBox5.Text = mm;
textBox6.Text = ss;
}
private void btnStop2_Click(object sender, EventArgs e)
{
timer2.Stop();
}
}
}
Sie haben zwei Timer, aber Sie haben nur einen Satz 'h',' m', 's' Variablen, die Sie ständig überschreiben – Adrian
Dies ist, wo Sie den Debugger verwenden müssen und Schritt durch Ihren Code haben Sie don 't that part mindest .. – MethodMan
Immer wenn Sie sehen, sich Code wie das zu wiederholen, sollten Sie sofort denken "Ich brauche wahrscheinlich eine Klasse". Ein UserControl funktioniert hier gut. –