if (time == 1)
{
timer1.Stop();
}
else if (time == 2)
{
timer2.Stop();
}
else if (time == 3)
{
timer3.Stop();
}
else if (time == 4)
{
timer4.Stop();
}
else if (time == 5)
{
timer5.Stop();
}
else
{
timer6.Stop();
}
这个垃圾东西,能不能写个循环代替?如果能的话,麻烦高人写一下,谢谢小弟初学C#,实在不会。。莫笑话。。莫笑话3Q3Q
{
timer1.Stop();
}
else if (time == 2)
{
timer2.Stop();
}
else if (time == 3)
{
timer3.Stop();
}
else if (time == 4)
{
timer4.Stop();
}
else if (time == 5)
{
timer5.Stop();
}
else
{
timer6.Stop();
}
这个垃圾东西,能不能写个循环代替?如果能的话,麻烦高人写一下,谢谢小弟初学C#,实在不会。。莫笑话。。莫笑话3Q3Q
LZ不会写switch case?
写循环的话要做映射表或者你的timer要做成数组.
{
case "1":
timer1.Stop();
break;
case "2":
timer2.Stop();
break;
case "3":
timer3.Stop();
break;
case "4":
timer4.Stop();
break;
case "5":
timer5.Stop();
break;
default:
timer6.Stop();
break;
}
假设你所有的定时器都放在一个数组timer里:
if (time < 6)
timer[time-1].stop();
else
timer[5].stop();
switch(time.ToString())
{
case "1":
timer1.Stop();
break;
case "2":
timer2.Stop();
break;
case "3":
timer3.Stop();
break;
case "4":
timer4.Stop();
break;
case "5":
timer5.Stop();
break;
default…
当 time =1的时候,是time1.stop().
当 time =2的时候,是time2.stop().有没有类似for循环一样的东西可以这样一次循环完的?我这里是写了6个,万一有100个timer ....那不是要switch100了
无法将带 [] 的索引应用于“System.Windows.Forms.Timer”类型的表达式
都说了变量timer是个数组....
也就是说别用timer1 timer2 ... timern这种变量了.
把它们统一放在一个数组timer里.
foreach (Control item in this.Controls)
if (item.Name == "timer" + time && item is System.Timers.Timer)
((System.Timers.Timer)item).Stop();
if (time >= 1 && time <= 6)
{
if (this.Controls["timer" + time.ToString()] is Timer)
(this.Controls["timer" + time.ToString()] as Timer).Stop();
}
无法将类型“myBilliards.Control”转换为“System.Timers.Timer”
无法通过引用转换、装箱转换、取消装箱转换、包装转换或 Null 类型转换将类型“System.Windows.Forms.Control”转换为“System.Windows.Forms.Timer”
你硬要循环的话,你可以把所有的Time保存到泛型集合。
List<Timer> timers = new List<Timer>();
timers.Add(this.timer1);
......
public void stopTime(int j)
{ for (int i = 1; i < timers.Count; i++)
if (j == i)
timers[i].Stop();
}
这样的话,假设有100个timer,还是要
timers.Add() 100次吧。。
另外下面stopTime()的那个参数j,是什么意思呀这个方法谁调用的?
foreach (object var in this.Controls)
{
if (var is Timer)
this.timers.Add(var as Timer);
}
那个方法就是你要停止那个定时器就传那个参数咯。
就像你的代码一样就传个time。stopTime(time);
在初始化的时候就不要用timern之类的变量了.
而是改用数组.记得这个数组必须是你的类的成员变量.
在类里这样声明:
Timer [] timer;
然后在初始化那堆定时器的时候这样写:
timer = new Timer[6];
for (int i = 0;i< 6;++i)
{
timer[i] = new Timer ();
//设置定时器的其它参数.
}剩下的就可以通过timer[n]访问到指定的定时器了.
应该是:
timer[time-1].stop();
{
case 1:
timer1.Stop();
break;
case 2:
timer2.Stop();
break;
case 3:
timer3.Stop();
break;
case 4:
timer4.Stop();
break;
case 5:
timer5.Stop();
break;
default:
timer6.Stop();
break;
}
代码如下:((System.Windows.Forms.Timer)this.Controls["timer" + time]).Stop();
foreach (Control item in this.Controls)
if (item.Name == "timer" + time && item is System.Timers.Timer)
((System.Timers.Timer)item).Stop();
for(int k=1;k<=6;k++)
{
i++;
if(k==i)
{
timer1.Stop();
}
}
if(time<6&&time>0)
timer[time-1].Stop();
else
timer6.Stop();
{
string[] time=new string[100];
for (int j = 1; j <= i; j++)
{
time[j] = "time" + j.ToString();
if (i == j)
{
if (j <= 6)
{
Console.WriteLine(time[j]+".stop()");
}
}
}
}就这样可以了
{
case "1":
timer1.Stop();
break;
case "2":
timer2.Stop();
break;
case "3":
timer3.Stop();
break;
case "4":
timer4.Stop();
break;
case "5":
timer5.Stop();
break;
default:
timer6.Stop();
break;
}
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Threading;
using System.Collections;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
MyTimer1 mt1 = new MyTimer1();
AbstractTimeFactoryHelp.Run(mt1, new AbstractTimeFactoryHelp.Timestart(mt1.PlayGame)); MyTimer2 mt2 = new MyTimer2();
AbstractTimeFactoryHelp.Run(mt2, new AbstractTimeFactoryHelp.Timestart(mt2.PlayGame));
//效果是,无需再判断time == n 了
TimeStop(mt1);
TimeStop(mt2);
}
//这里是你以前的代码,该成以下
//if (time == 1)
//{
// timer1.Stop();
//}
//else if (time == 2)
//{
// timer2.Stop();
//}
//else if (time == 3)
//{
// timer3.Stop();
//}
//else if (time == 4)
//{
// timer4.Stop();
//}
//else if (time == 5)
//{
// timer5.Stop();
//}
//else
//{
// timer6.Stop();
//} 改好后的
static void TimeStop(AbstractTimer time)
{
AbstractTimeFactoryHelp.Stop(time);
}
} /// <summary>
/// 抽象Timer基类,只定义成员
/// </summary>
public abstract class AbstractTimer
{
public Thread time;
} /// <summary>
/// 工厂,用于定义类的函数,以后需要添加新方法,就直接根据抽象基类的参数,
/// 向里面填充就可以了,可以保证每一个继承抽象基类的子类都拥有同样的方法
/// </summary>
public class AbstractTimeFactoryHelp
{
public delegate void Timestart(); public static void Run(AbstractTimer timer, Timestart start)
{
if (isRun(timer))
{
timer.time = new Thread(new ThreadStart(start));
}
} public static void Stop(AbstractTimer timer)
{
if (isRun(timer))
{
timer.time.Abort();
timer.time = null;
}
} static bool isRun(AbstractTimer timer)
{
if (null != timer.time)
{
if (timer.time.IsAlive)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
}
public class MyTimer1 : AbstractTimer
{
public void PlayGame()
{
Console.WriteLine("My Name is PlayGame1");
}
} public class MyTimer2 : AbstractTimer
{
public void PlayGame()
{
Console.WriteLine("My Name is PlayGame2");
}
}
}
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Threading;
using System.Collections;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
MyTimer1 mt1 = new MyTimer1();
AbstractTimeFactoryHelp.Run(mt1, new AbstractTimeFactoryHelp.Timestart(mt1.PlayGame)); MyTimer2 mt2 = new MyTimer2();
AbstractTimeFactoryHelp.Run(mt2, new AbstractTimeFactoryHelp.Timestart(mt2.PlayGame));
Thread.Sleep(500);
TimeStop(mt1);
TimeStop(mt2);
Console.Read();
}
//这里是你以前的代码,该成以下
//if (time == 1)
//{
// timer1.Stop();
//}
//else if (time == 2)
//{
// timer2.Stop();
//}
//else if (time == 3)
//{
// timer3.Stop();
//}
//else if (time == 4)
//{
// timer4.Stop();
//}
//else if (time == 5)
//{
// timer5.Stop();
//}
//else
//{
// timer6.Stop();
//} 改好后的
static void TimeStop(AbstractTimer time)
{
AbstractTimeFactoryHelp.Stop(time);
}
} /// <summary>
/// 抽象Timer基类,只定义成员
/// </summary>
public abstract class AbstractTimer
{
public Thread time;
} /// <summary>
/// 工厂,用于定义类的函数,以后需要添加新方法,就直接根据抽象基类的参数,
/// 向里面填充就可以了,可以保证每一个继承抽象基类的子类都拥有同样的方法
/// </summary>
public class AbstractTimeFactoryHelp
{
public delegate void Timestart(); public static void Run(AbstractTimer timer, Timestart start)
{
if (!isRun(timer))
{
timer.time = new Thread(new ThreadStart(start));
timer.time.Start();
}
} public static void Stop(AbstractTimer timer)
{
if (isRun(timer))
{
timer.time.Abort();
timer.time = null;
}
} static bool isRun(AbstractTimer timer)
{
if (null != timer.time)
{
if (timer.time.IsAlive)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
}
public class MyTimer1 : AbstractTimer
{
public void PlayGame()
{
Console.WriteLine("My Name is PlayGame1");
}
} public class MyTimer2 : AbstractTimer
{
public void PlayGame()
{
Console.WriteLine("My Name is PlayGame2");
}
}
}