我有一个ComboBoxes数组:
ComboBox[] boxes = new ComboBox[3]{ComboBox box1, ComboBox box2, ComboBox box3};
每个ComboBox在索引更改时都会传递给同一个事件处理程序:
foreach (ComboBox box in boxes)
{
box.SelectedIndexChanged += new EventHandler(this.Box_Changed);
}
我想要做的是将整个boxes[]
数组传递给事件处理程序,而不是单个ComboBox。我怎么能这样做?
答案 0 :(得分:1)
你无法真正改变发送给回调的内容,因为代表你的框架会调用它。
你可以在其他地方找到存储数据的地方,比如每个ComboBox的.Tag属性,或者你可以创建一个简单的小助手方法,它知道ComboBox并让它为你传递数据。
public void Example(ComboBox[] boxes)
{
// Using a statement lambda to wrap the call
foreach (ComboBox box in boxes)
{
box.SelectedIndexChanged += new EventHandler((sender, e) =>
{
Box_Changed_Example1(boxes, sender, e);
});
}
// Or, use the .Tag property to store the data
foreach (ComboBox box in boxes)
{
box.Tag = boxes;
box.SelectedIndexChanged += new EventHandler(Box_Changed_Example2);
}
}
void Box_Changed_Example1(ComboBox[] boxes, object sender, EventArgs e)
{
// TODO
}
void Box_Changed_Example2(object sender, EventArgs e)
{
ComboBox[] boxes = (ComboBox[])((ComboBox)sender).Tag;
// TODO
}