从计时器事件访问主表单

时间:2012-05-07 21:24:41

标签: c# winforms

我正在创建一个

System.Timers.Timer aTimer = new System.Timers.Timer();

并希望从

访问主窗体或Form1
private static void OnTimedEvent(object source, ElapsedEventArgs e)
    {...}

事件,我该怎么做?我无法通过谷歌在线找到这样做的例子。我正在绘制一些图形,并希望在计时器事件触发时更改它们。我不能使用表单计时器,因为我想将此代码移植到其他地方并且它将无法使用。

由于

4 个答案:

答案 0 :(得分:0)

我不太喜欢以下代码,但是如果你找不到另一种方法来获取对你的Form1实例的引用,你可以通过Application.OpenForms尝试:< / p>

// using System.Linq;
// using System.Windows.Forms; 

Form1 mainForm = Application.OpenForms.OfType<Form1>().SingleOrDefault();

答案 1 :(得分:0)

如果问题是如何从计时器中的Form1访问方法,但它是在一个单独的类中,那么你可以做的是将Form1的引用传递给包含计时器的类。在类范围中声明一个变量:

Form1 mainForm;

重要的是你不要在这里实例化它。然后创建一个这样的方法:

public void PassReference(Form1 form1)
{
   this.mainForm = form1;
}

现在,从MainForm调用PassReference后,您将可以访问Form1中的所有公共方法。

答案 2 :(得分:0)

我希望计时器也在MainForm中。在这种情况下,您可以使用'this'。

this - 是MainForm

答案 3 :(得分:0)

您的事件被声明为静态但时间本身不是。

如果您必须有静态事件,请同时保留对表单的静态引用,并在您的计时器事件中使用该引用。