我在 List<myObject>
中有 20 件商品.每个都有一个 UserControl
的实例与之相关。每个对象都可以通过 MenuStrip
访问单击相应项目时需要显示 UserControl。目前,我为它们中的每一个都有一个事件处理程序,这很有效,但我想知道是否存在一种方法来简化它并为所有项目使用一个事件处理程序。
这可能吗?如果是这样,最好的方法是什么。
编辑:其他人能否就此问题提供任何意见?我对 Mailo 的回答有疑问。基本上我需要做的就是制作一个可以显示适当的事件处理程序 UserControl
存储在 List<myObject>
中当单击正确的 MenuStrip 项时作为属性。有没有更直接的方法来做到这一点?理想情况下,我想做一个 foreach
循环可以遍历列表并设置处理程序。
没有人可以帮我解决这个问题吗?
最佳答案
这不是很难。首先,您需要某种方式将菜单项与列表中的控件相关联。
1) 因为你有一个列表,索引是最简单的方法(你可以使用 Dictionary<> 来简化这个关联)。因此,假设当您单击第一个菜单项时,您希望显示 myObjecList[0]
。当您单击第二个 MenuItem 时,myObjectList[1]
将出现,依此类推。为此,转到每个菜单项,并在“属性”中为 Tag
属性分配一个值。对于第一个菜单项,将 Tag
分配给 0,对于第二个菜单项,将 Tag
分配给 1 - 依此类推。
2) 创建一个事件处理程序并将相同的处理程序分配给所有菜单项。事件处理程序可能看起来像这样:
private void myToolStripMenuItem_Click(object sender, EventArgs e)
{
// source menu item which was clicked
ToolStripMenuItem item = sender as ToolStripMenuItem;
if(item != null)
{
int index = int.Parse(item.Tag.ToString()); // get the index from Tag
myObject control = myObjectList[index];
// do your stuff with your control
}
}
关于c# - 为多个对象使用事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16720618/