我有8个窗体,一个全局变量Timer TM,在8个窗体中都写了这个TM的委托方法,Program.TM.Tick += new EventHandler(TM_Tick);我希望当定时时间到时,就弹出一个提示窗口,可问题是每次定时时间一到就会弹出8个窗口~~
因为刚学C#,对于委托的概念不是很清楚,怎么解决以上这个问题,或者说,定时时间到,怎么只调用当前窗口的TM_Tick方法,其他窗口的就不要调用了?
因为刚学C#,对于委托的概念不是很清楚,怎么解决以上这个问题,或者说,定时时间到,怎么只调用当前窗口的TM_Tick方法,其他窗口的就不要调用了?
Program.TM.Tick += new EventHandler(TM_Tick);
应该就只有打开窗体时有了
在每个窗体的处理函数里加个判断:
如果当前窗体不是活动窗体,就return这样就能保证每次到时间只有一个会执行
Program.TM.Tick += new EventHandler(TM_Tick);
TM_Tick(...){
if(this.Visible == false){
return...
}
}
Program.TM.Tick += new EventHandler(TM_Tick);那就是为一个时间注册了8次事件处理函数,到事件发生时,每个处理函数都会被处理。
要想得到楼主想要的效果,5楼和7楼的办法是一种。
另外如果lz的8个处理函数都一样的话,只添加一个好了,这样就只运行一个。
using System;
using System.Collections.Generic;
using System.Windows.Forms;namespace WindowsApplication277
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false); Form1 F1 = new Form1();
F1.Text = "A"; Form2 F2 = new Form2();
F2.Text = "B";
F2.Show(); Timer T = new Timer();
T.Interval = 3000;
T.Tick += F1.Tick;
T.Tick += F2.Tick;
T.Enabled = true; Application.Run(F1);
} class Form1 : Form
{
public void Tick(object sender, EventArgs e)
{
if (Form.ActiveForm ==this )
MessageBox .Show ("A");
}
} class Form2 : Form
{
public void Tick(object sender, EventArgs e)
{
if (Form.ActiveForm == this)
MessageBox.Show("B");
}
}
}
}