2012-04-04 70 views
0

如何掛鉤自定義函數,以便在標籤上點擊,相同的函數將運行並傳遞參數?鉤住標籤單擊事件的自定義函數

List<int> _list1 = new List<int>(); //1, 2, 3, 4, 5 
    foreach (var item in _list1) 
    { 
     Label lb = new Label { Text = item.ToString() }; 
    lb.Click += //custom function and pass the parameter item 

    } 

private void CustomFunctionOnClick(int s) 
{ 
textBox1.Text = s.ToString(); 
} 

- >我無法用標籤的點擊事件掛接代表。
- >相反,我可以有一個CustomEventArgs類將數據傳遞給事件(object sender, CustomEventArgs e),我可以在事件中運行相同的代碼。 但是,單擊事件委託沒有將CustomEventArgs定義爲事件的參數?

那麼,這是如何完成的?

回答

0
List<int> _list1 = new List<int>(); //1, 2, 3, 4, 5 

foreach (var item in _list1) 
{ 
    // take copy of loop variable to avoid closing over the loop variable 
    int i = item; 
    Label lb = new Label { Text = item.ToString() }; 
    lb.Click += (x,y) => CustomFunction(i); 
} 

void CustomFunction(int item) 
{ 
} 
+0

只是想知道我怎麼會DOEN這一點沒有lambda函數? : -/ – Cipher 2012-04-04 08:59:48

+0

lb.Click + = delegate(object sender,EventArgs e){CustomFunction(i); }; – Phil 2012-04-04 09:04:07

+0

@Cipher你也可以標記項目到每個標籤創建.. – nawfal 2012-04-04 09:24:24

0

你也可以這樣做:

List<int> _list1 = new List<int>(); //1, 2, 3, 4, 5 

foreach (var item in _list1) 
{ 
    Label lb = new Label { Text = item.ToString() }; 
    lb.Tag = item; 
    lb.Click += CustomFunctionOnClick; 
} 

private void CustomFunctionOnClick(object sender, EventArgs e) 
{ 
    Label l = (Label)sender; 
    int item = l.Tag; 
}