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

本文关键字:列表 创建 事件 动态 | 更新日期: 2023-09-27 17:54:11

我正在使用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..        
    }
}