我正在使用C#,WinForms,我在表单上创建了一个按钮,我动态创建了一个计时器。我有另一个按钮,我需要检查我创建了多少计时器。
我试图在表单中取消计时器,但它不起作用,这是代码:
int i=0;
private void button1_Click(object sender, EventArgs e)
{
Timer timer = new Timer();
timer.Interval = update;
timer.Tag = i;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
timer.Enabled = true;
i++;
}
private void button2_Click(object sender, EventArgs e)
{
foreach (var controllo in this.Controls)
{
if (controllo is Timer)
{
Timer item = (Timer)controllo;
if (timer.Tag ==1)
{
item.Stop();
item.Dispose();
}
}
}
}
答案 0 :(得分:0)
以表格
维护全球计时器列表List<Timer> GlobalTimers=new List<Timer>();
private void button1_Click(object sender, EventArgs e)
{
Timer timer = new Timer();
timer.Interval = update;
timer.Tag = i;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
timer.Enabled = true;
GlobalTimers.Add(timer);
}
private void button2_Click(object sender, EventArgs e)
{
foreach (var item in GlobalTimers)
{
if (item.Tag ==1)
{
item.Stop();
item.Dispose();
}
}
}
答案 1 :(得分:0)
您还没有将新创建的计时器添加到form.controls。循环无法找到控件,我建议您将定时器添加到Form控件中,如下所示:
private void button1_Click(object sender, EventArgs e)
{
Timer timer = new Timer();
// code here
this.Controls.Add(timer);
}
private void button2_Click(object sender, EventArgs e)
{
foreach (var ctrl in this.Controls.OfType<Timer>())
{
if (ctrl.Tag ==1)
{
ctrl.Stop();
ctrl.Dispose();
}
}
}
或者,您可以使用列表并将新创建的计时器添加到列表中,稍后您可以遍历List<Timer>
而不是浏览所有控件。这意味着代码将如下所示:
List<Timer> TimerList =new List<Timer>();
int i=0;
private void button1_Click(object sender, EventArgs e)
{
Timer timer = new Timer();
// code here
TimerList.Add(timer);
}
private void button2_Click(object sender, EventArgs e)
{
foreach (Timer t in GlobalTimers)
{
if (t.Tag ==1)
{
t.Stop();
t.Dispose();
}
}
}