2013-03-13 57 views
0

我嘗試在其他方法動態調用方法,但此代碼dosn't工作。我該怎麼做 ?我怎麼可以變量方法名稱在參數

#region Form1_Load() 
private void Form1_Load(object sender, EventArgs e) 
{ 
    Load(); 
    //this line 
    InitTimer(this.Form1_Load(sender,e)); 
} 
#endregion 

#region Timer() 
public void InitTimer(dynamic _method) 
{ 
    System.Windows.Forms.Timer timer1; 
    timer1 = new System.Windows.Forms.Timer(); 
    timer1.Tick += new EventHandler(_method); 
    timer1.Interval = 5000; // in miliseconds 
    timer1.Start(); 
} 
#endregion 
+0

我編輯了你的標題。請參見「[應的問題包括‘標籤’,在他們的頭銜?(http://meta.stackexchange.com/questions/19190/)」,這裏的共識是「不,他們不應該」。 – 2013-03-13 23:47:40

+0

你收到什麼具體錯誤? – 2013-03-13 23:48:06

+0

看起來你會在這裏得到一個無限遞歸,因爲你自己調用了'Form1_Load',並且它會在'InitTimer'之前被評估。 – Lee 2013-03-13 23:49:01

回答

2

你在找什麼是代表。委託本質上是一個方法指針,可以在以後調用。

private void Form1_Load(object sender, EventArgs e) 
    { 
     Load(); 
     //this line 
     InitTimer(() => this.Form1_Load(sender,e)); 
    } 

    public void InitTimer(Action target) 
    { 
     System.Windows.Forms.Timer timer1; 
     timer1 = new System.Windows.Forms.Timer(); 
     timer1.Tick += (sender, e) => target(); 
     timer1.Interval = 5000; // in miliseconds 
     timer1.Start(); 
    } 
+0

錯誤:委託'System.EventHandler'不接受0參數 – ASPMaker 2013-03-13 23:54:05

+0

不工作becuase「()=>」lambda沒有參數,而EventHandler有... – 2013-03-13 23:55:27

+0

@RomanGruber哎呀,修正 – JaredPar 2013-03-13 23:58:34

0
#region Form1_Load() 
private void Form1_Load(object sender, EventArgs e) 
{ 
    Load(); 
    //this line 
    InitTimer(OtherLoad); 
} 
#endregion 

#region Timer() 

private void OtherLoad(object sender, EventArgs e) 
{...} 

public void InitTimer(EventHandler _method) 
{ 
    System.Windows.Forms.Timer timer1; 
    timer1 = new System.Windows.Forms.Timer(); 
    timer1.Tick += _method; 
    timer1.Interval = 5000; // in miliseconds 
    timer1.Start(); 
} 
#endregion 

重要:使你的計時器調用不同的方法,以避免一遍又一遍地把定時器設置(我用「OtherLoad」)!