c# - 将 MenuItem 与列表中的项目动态关联

标签 c# .net winforms contextmenu menuitem

我正在使用 C#,我有一个对象列表,我想在上下文菜单中显示所有对象,每个对象都显示为 MenuItem

单击一个 MenuItem 时,我想引用 MenuItem_Click() 函数中的关联对象。

List<MyObject> MyList = new List<MyObject>();
ContextMenu menu = new ContextMenu();

foreach(MyObject o in MyList)
{
     MenuItem item = new MenuItem();
     item.Header = o.Name;
     item.Click += MenuItem_Click;
     menu.Items.add(item);
}

menu.IsOpen=true;

void MenuItem_Click(object sender, RoutedEventArgs e){

    // Assume the 5th MenuItem is clicked, I need to refer to the 5th object in MyList
    // how to do it?

}

最佳答案

适合您当前拥有的代码的快速脏 hack:使用 Tag 属性。

foreach(MyObject o in MyList)
{
    MenuItem item = new MenuItem();
    item.Header = o.Name;
    item.Tag = o;
    item.Click += MenuItem_Click;
    menu.Items.add(item);
}

那么你可以这样引用它:

private void MenuItem_Click(object sender, RoutedEventArgs e)
{
    var myObj = (MyObject)((MenuItem)sender).Tag;
}

关于c# - 将 MenuItem 与列表中的项目动态关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8325530/

相关文章:

c# - 将 WAV 录制到 IBM Watson Speech-To-Text

.NET:是否有包含旧/新值的 PropertyChangedEventArgs 的内置版本?

c# - 强制 WaitCursor 到模态窗体的父窗体

c# - 当表单的类变得太大时怎么办?

c++ - 在线程中更改 Windows 窗体控件

c# - ConfigureAwait(false) 性能测试

c# - 循环访问另一个集合内的集合和 LINQ lambda 表达式

c# - PointToScreen 多个显示器

c# - Unity 依赖解析器无法与 Katana 和 WebAPI 一起使用?

c# - MyApp.vshost.exe 应该与 MyApp.exe 一起分发吗?