使用事件动态创建多个列表框

时间:2015-06-07 16:13:06

标签: c# listbox

我使用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!
}

2 个答案:

答案 0 :(得分: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的选择更改。这就是它发生的原因。

答案 1 :(得分: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..        
    }
}