使用事件动态创建多个列表框
本文关键字:列表 创建 事件 动态 | 更新日期: 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..
}
}