2015-06-07 3 views
0

Я создаю динамически несколько listboxes в c# с использованием цикла for. Я хочу добавить к каждому из них SelectionChanged, так что, когда выбранный элемент изменен, я показываю контент, на основе которого находится listbox, и элемент. Но, кажется, что событие связано только последний:Несколько списков, созданных динамически с событием

for (int d =0; d<3; d++) 
{     
    //list des attribut 
    ListBox lb = new ListBox(); 
    lb.Width = 200; 
    lb.Height = 250; 

    for(int i=0; i< names.Length; i++) 
    {          
     lb.Items.Add(names[i]);  
    } 

    listboxes.Add(lb); 
    lb.SelectionChanged += (sender, e) => LBTest_SelectionChanged(sender, e, d); 
    ResultPalner.Children.Add(lb); 
} 

public void LBTest_SelectionChanged(object sender, EventArgs e, int i) 
{ 
    // Do something here according to which listbox it is! 
} 

ответ

0

Попробуйте это:

public void LBTest_SelectionChanged(object sender, EventArgs e, int i) 
{ 
    ListBox lst = sender as ListBox; 
    if (lst.Name == "listBox1") 
    { 
     // do something here according to..   
    } 
} 
+0

он работал, я добавил имя каждого ListBox затем использовал его, я понимаю, что мне не нужно переменные (INT я) в конце концов, поблагодарить у –

1

Вы должны использовать object sender в LBTest_SelectionChanged, чтобы выяснить, какие ListBox изменил свой выбор.

public void LBTest_SelectionChanged(object sender, EventArgs e, int i) { 
    if(/* sender is listbox 1*/) { 
     /* do something */ 
    } else if (/* sender is listbox 2*/) { 
     /* do something else */ 
    } else ... 
} 

Как

public void LBTest_SelectionChanged(object sender, EventArgs e, int i) { 
    if((ListBox)sender.Name == "name1") { 
     /* do something */ 
    } else if ((ListBox)sender.Name == "name2") { 
     /* do something else */ 
    } else ... 
} 

Дело в том, что происходит, в основном то, что вы делаете. Вы хотите, чтобы одна и та же функция отвечала на изменения смены всех ListBoxes. Вот почему это происходит.

Смежные вопросы