c# - 为多个对象使用事件处理程序

标签 c# winforms

我在 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/

相关文章:

c# - 从另一个线程更新列表框后,如何强制主GUI线程更新列表框?

c# - 如何在 Windows 窗体 C# 中将大量数据保存在内存中

c# - 使用 Winforms 中运行的后台线程更新 UI 中的控件

c# - WinForm 事件处理程序激活速度太慢

c# - 可重复使用的 Try/Catch block

C# 线程和阻塞

c# - 我想在 C# unity3D 中实例化一个通用类型

c# - 如何获得 1 年的时间跨度?

c# - 如何生成只接受数字的文本框?

C# - 返回泛型数组类型