我这样写,可以根据不同的i值 来获得到不同的label,没问题
Timer timer = (Timer)Controls["timer"+i];
可同样的写法运用于Timer,就会报错,说
无法将类型“System.Windows.Forms.Control”转换为“System.Windows.Forms.Timer”
哪位大哥帮忙指点一下,谢谢
20 个解决方案
#1
timer不是从control继承的
#2
请教,那我应该怎么写?
timer 是从哪里继承的?
#3
你查下MSDN看下Timer类不就知道了嘛。。
继承层次结构
System..::.Object
System..::.MarshalByRefObject
System.ComponentModel..::.Component
System.Windows.Forms..::.Timer
继承层次结构
System..::.Object
System..::.MarshalByRefObject
System.ComponentModel..::.Component
System.Windows.Forms..::.Timer
#4
你的代码有问题。参照下面
if(Controls[i].GetType()==Typeof(Timer))
{
Timer timer = (Timer)Controls[i];
}
if(Controls[i].GetType()==Typeof(Timer))
{
Timer timer = (Timer)Controls[i];
}
#5
Timer t = (Timer)this.components.Components[0];
#6
谢谢。但是还是一样的错误
#7
不行呀。。
#8
如果你的timer是从工具箱拖的,设计器在InitializeComponent方法中会自动添加
这样的话只能通过索引来取得组件,
如果要能够通过组件名称取得组件,比如
则需要自己手动添加timer,比如:
this.timer1 = new System.Windows.Forms.Timer(this.components);
这样的话只能通过索引来取得组件,
this.components.Components[0];
如果要能够通过组件名称取得组件,比如
this.components.Components["timer1"];
则需要自己手动添加timer,比如:
Timer timer1 = new Timer();
this.components.Add(timer1, "timer1");
#9
8楼
Timer timer1 = new Timer();
this.components.Add(timer1, "timer1");
我用你的这个方法,系统提示
重复的组件名称“timer1”。组件名称必须唯一且不区分大小写。
Timer timer1 = new Timer();
this.components.Add(timer1, "timer1");
我用你的这个方法,系统提示
重复的组件名称“timer1”。组件名称必须唯一且不区分大小写。
#10
foreach (object obj in this.components.Components)
{
if (obj.GetType() == typeof(Timer))
{
Timer timer2 = (Timer)obj;
}
}
{
if (obj.GetType() == typeof(Timer))
{
Timer timer2 = (Timer)obj;
}
}
#11
Timer _Time = (Timer)this.GetType().GetField("timer1",BindingFlags.NonPublic|BindingFlags.Instance).GetValue(this);
_Time.Tick += new EventHandler(_Time_Tick);
_Time.Interval = 100;
_Time.Enabled = true;
void _Time_Tick(object sender, EventArgs e)
{
this.Text = DateTime.Now.Second.ToString();
}
_Time.Tick += new EventHandler(_Time_Tick);
_Time.Interval = 100;
_Time.Enabled = true;
void _Time_Tick(object sender, EventArgs e)
{
this.Text = DateTime.Now.Second.ToString();
}
#12
我只是打个比方,你换一下名字不就可以啦
#13
未将对象引用设置到对象的实例。
#14
嗯。我知道,我换过的。
我换成timer2,就提示重复timer2
我是这样
Timer t= new Timer();
this.components.Add(t, "timer"+i);
都不行
#15
这样的话怎么通过名称来获得呢?
#16
手动添加Timer之前先判断一下
[C#=Code]
if (this.components == null)
{
this.components = new System.ComponentModel.Container();
}
[/Code]
[C#=Code]
if (this.components == null)
{
this.components = new System.ComponentModel.Container();
}
[/Code]
#17
你一定要通过名称的话,可以利用Timer的Tag贮存Timer的名称,如timer1.
foreach (object obj in this.components.Components)
{
if (obj.GetType() == typeof(Timer))
{
Timer timer2 = (Timer)obj;
string objName = (string)timer2.Tag;
if(objName=="timer1")
{
//.......
}
else if(objName=="timer2")
{
//....
}
}
}
foreach (object obj in this.components.Components)
{
if (obj.GetType() == typeof(Timer))
{
Timer timer2 = (Timer)obj;
string objName = (string)timer2.Tag;
if(objName=="timer1")
{
//.......
}
else if(objName=="timer2")
{
//....
}
}
}
#18
这样吗
if (this.components == null)
{
this.components = new System.ComponentModel.Container();
Timer t = new Timer();
this.components.Add(t, "timer" + begin);
t.Start();
}
这次没有错误了,但是没有运行里面的代码
#19
你没有绑定事件啊
t.Tick += new EventHandler(t_Tick);
#20
up
学习了...
学习了...
#21
#1
timer不是从control继承的
#2
请教,那我应该怎么写?
timer 是从哪里继承的?
#3
你查下MSDN看下Timer类不就知道了嘛。。
继承层次结构
System..::.Object
System..::.MarshalByRefObject
System.ComponentModel..::.Component
System.Windows.Forms..::.Timer
继承层次结构
System..::.Object
System..::.MarshalByRefObject
System.ComponentModel..::.Component
System.Windows.Forms..::.Timer
#4
你的代码有问题。参照下面
if(Controls[i].GetType()==Typeof(Timer))
{
Timer timer = (Timer)Controls[i];
}
if(Controls[i].GetType()==Typeof(Timer))
{
Timer timer = (Timer)Controls[i];
}
#5
Timer t = (Timer)this.components.Components[0];
#6
谢谢。但是还是一样的错误
#7
不行呀。。
#8
如果你的timer是从工具箱拖的,设计器在InitializeComponent方法中会自动添加
这样的话只能通过索引来取得组件,
如果要能够通过组件名称取得组件,比如
则需要自己手动添加timer,比如:
this.timer1 = new System.Windows.Forms.Timer(this.components);
这样的话只能通过索引来取得组件,
this.components.Components[0];
如果要能够通过组件名称取得组件,比如
this.components.Components["timer1"];
则需要自己手动添加timer,比如:
Timer timer1 = new Timer();
this.components.Add(timer1, "timer1");
#9
8楼
Timer timer1 = new Timer();
this.components.Add(timer1, "timer1");
我用你的这个方法,系统提示
重复的组件名称“timer1”。组件名称必须唯一且不区分大小写。
Timer timer1 = new Timer();
this.components.Add(timer1, "timer1");
我用你的这个方法,系统提示
重复的组件名称“timer1”。组件名称必须唯一且不区分大小写。
#10
foreach (object obj in this.components.Components)
{
if (obj.GetType() == typeof(Timer))
{
Timer timer2 = (Timer)obj;
}
}
{
if (obj.GetType() == typeof(Timer))
{
Timer timer2 = (Timer)obj;
}
}
#11
Timer _Time = (Timer)this.GetType().GetField("timer1",BindingFlags.NonPublic|BindingFlags.Instance).GetValue(this);
_Time.Tick += new EventHandler(_Time_Tick);
_Time.Interval = 100;
_Time.Enabled = true;
void _Time_Tick(object sender, EventArgs e)
{
this.Text = DateTime.Now.Second.ToString();
}
_Time.Tick += new EventHandler(_Time_Tick);
_Time.Interval = 100;
_Time.Enabled = true;
void _Time_Tick(object sender, EventArgs e)
{
this.Text = DateTime.Now.Second.ToString();
}
#12
我只是打个比方,你换一下名字不就可以啦
#13
未将对象引用设置到对象的实例。
#14
嗯。我知道,我换过的。
我换成timer2,就提示重复timer2
我是这样
Timer t= new Timer();
this.components.Add(t, "timer"+i);
都不行
#15
这样的话怎么通过名称来获得呢?
#16
手动添加Timer之前先判断一下
[C#=Code]
if (this.components == null)
{
this.components = new System.ComponentModel.Container();
}
[/Code]
[C#=Code]
if (this.components == null)
{
this.components = new System.ComponentModel.Container();
}
[/Code]
#17
你一定要通过名称的话,可以利用Timer的Tag贮存Timer的名称,如timer1.
foreach (object obj in this.components.Components)
{
if (obj.GetType() == typeof(Timer))
{
Timer timer2 = (Timer)obj;
string objName = (string)timer2.Tag;
if(objName=="timer1")
{
//.......
}
else if(objName=="timer2")
{
//....
}
}
}
foreach (object obj in this.components.Components)
{
if (obj.GetType() == typeof(Timer))
{
Timer timer2 = (Timer)obj;
string objName = (string)timer2.Tag;
if(objName=="timer1")
{
//.......
}
else if(objName=="timer2")
{
//....
}
}
}
#18
这样吗
if (this.components == null)
{
this.components = new System.ComponentModel.Container();
Timer t = new Timer();
this.components.Add(t, "timer" + begin);
t.Start();
}
这次没有错误了,但是没有运行里面的代码
#19
你没有绑定事件啊
t.Tick += new EventHandler(t_Tick);
#20
up
学习了...
学习了...