将ToolStripMenuItems动态添加到MenuStrip(C#/ Winforms)

Ibr*_*taz 19 c# menuitem winforms

我实施了我的解决方案(基本解决方案),我很高兴.

问题是当我使用'Add'方法向ToolStripItemCollection添加新项时,我得到一些重载......有意义的一个是字符串参数,图像参数和EventHandler参数.

因为我的下拉列表将在RunTime中用作动态历史记录,这意味着它在编译时将变为空.这意味着我无法通过使用设计器表面的标准路径添加事件处理程序(单击时).我被迫使用上述的重载.

我的图像对我没用,但动态添加事件处理程序是我感兴趣的并需要帮助.

网址:http://msdn.microsoft.com/en-us/library/bxdt0s8t.aspx

没有其他超载可以帮助我,所以我必须使用一个图像......任何人都有任何想法来解决这个问题并告诉我如何完全满足这个重载版本的add方法.

TIA.

更新:我在当前项目中再次执行此操作但使用更多更流畅的代码但原理相同,在运行时动态添加事件处理程序.我回家后会用一些示例代码更新这个.

jas*_*onh 35

我这样做的方法是创建一个数组,ToolStripMenuItems并用我正在添加的项填充该数组.我创建了一个方法来处理click事件,并让它检查我在运行时创建的每个项目的独特之处.您可以尝试使用每个的NameTag属性ToolStripMenuItem.然后AddRange在您要添加的菜单中使用.所以你的代码看起来像这样:

private void BuildMenuItems()
{
    ToolStripMenuItem[] items = new ToolStripMenuItem[2]; // You would obviously calculate this value at runtime
    for (int i = 0; i < items.Length; i++)
    {
        items[i] = new ToolStripMenuItem();
        items[i].Name = "dynamicItem" + i.ToString();
        items[i].Tag = "specialDataHere";
        items[i].Text = "Visible Menu Text Here";    
        items[i].Click += new EventHandler(MenuItemClickHandler);
    }

    myMenu.DropDownItems.AddRange(items);
}

private void MenuItemClickHandler(object sender, EventArgs e)
{
    ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender;
    // Take some action based on the data in clickedItem
}
Run Code Online (Sandbox Code Playgroud)