2012-05-07 47 views
0

主要形式,我創建一個訪問從計時器事件

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

,並希望訪問的主要形式,或Form1中從

private static void OnTimedEvent(object source, ElapsedEventArgs e) 
    {...} 

事件,我該怎麼辦呢?我無法通過谷歌在線找到一個例子,它可以做到這一點。我正在繪製一些圖形,並希望在計時器事件觸發時更改它們。我無法使用窗體計時器,因爲我想將此代碼移植到其他位置,並且它不可用。

感謝

+0

哪裏是位於相對於Form1上定時器,究竟是什麼你的意思「訪問的主要形式。」你不知道如何創建和啓用計時器,或者你不知道如何實例化對象? –

回答

0

我不喜歡下面的代碼非常多,但如果你不能找到讓您Form1實例的引用到這個事件處理的另一種方式,你可以通過Application.OpenForms嘗試:

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

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

如果問題是如何從Form1的訪問方法的計時器,但它是在一個單獨的類,那麼你可以做的就是一通Form1的包含該定時器類的引用。在類範圍內聲明一個變量:

Form1 mainForm; 

重要的是您不要在此實例化它。然後創建一個像這樣的方法:

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

現在,你從MainForm中調用PassReference後,你將有機會獲得在Form1中所有公共方法。

0

我希望計時器也在MainForm中。在這種情況下,你可以使用'this'。

this - 是的MainForm

0

你的事件被聲明爲靜態的,但時間本身是沒有的。

如果你必須有一個靜態事件,保持靜態引用您的形式以及和使用您的計時器事件內的參考。