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

Multiple listboxes created dynamically with event

我正在使用 for 循环在 c# 中动态创建多个 listboxes。 我想为它们中的每一个添加一个 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!
}

您需要在 LBTest_SelectionChanged 中使用 object sender 来找出哪个 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 的选择更改。这就是它发生的原因。

试试这个:

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