添加一些东西到菜单栏c#并指定它们的代码

本文关键字:代码 菜单栏 添加 | 更新日期: 2023-09-27 18:04:03

这类似于:如何以编程方式向菜单栏添加内容?,但是我需要一些稍微不同的东西。

我有一个窗体,我正在创建窗体的新实例。但是,当我创建一个新表单时,我也会收集表单的所有当前实例,并使用菜单项填充"窗口"菜单,以允许我关闭窗口。因此,我不仅需要以编程方式向菜单栏添加内容,还需要指定这些菜单的功能。这可能吗?

代码:

    private void newWindowToolStripMenuItem_Click(object sender, EventArgs e)
    {
        var newForm = new Form1();
        newForm.Show();
        foreach (Form form in Application.OpenForms)
        {
            // add menu items under "Window" with the name of the window and the
            // event handler to close that window, aka form.Close() I assume; 
        }
    }

我想这样做,这样我每次创建一个新窗口时都会更新"窗口"菜单,这样我要关闭的窗口列表就准确了,没有任何奇怪的额外东西

添加一些东西到菜单栏c#并指定它们的代码

添加"ItemClicked"-event到您的ContexMenuStrip菜单。"ContextMenuStrip1"是这里使用的菜单的名称。按如下方式编辑部分代码:

        var newForm = new Form1() { Name = "myForm" };
        newForm.Show();
        foreach (Form form in Application.OpenForms)
        {
            // Add new menuitem with the name of the form, and save the reference to "Tag"-property
            ToolStripMenuItem newItem = new ToolStripMenuItem() { Name = newForm.Name, Text = newForm.Name, Tag = newForm };
            // Add the new item to the menu
            contextMenuStrip1.Items.Add(newItem);
        }

然后设置"ItemClicked"-event:

    private void contextMenuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
    {
        // Close the linked form, if it isn't disposed
        if (!((Form)((ToolStripItem)e.ClickedItem).Tag).IsDisposed)
        {
            ((Form)((ToolStripItem)e.ClickedItem).Tag).Close();
        }
        // Remove this menuitem from the menu
        contextMenuStrip1.Items.Remove((ToolStripItem)e.ClickedItem);
    }

您可以创建一个包含必需字段的类,并传递所需的数据。

public class MenuItemInfo
{
    public string Text { get; set; }
    public object Tag { get; set; }
    public EventHandler Handler { get; set; }
}
var menuItems = new List<MenuItemInfo>
{
    new MenuItemInfo
    {
        Text = "whatever",
        Tag = whatever,
        Handler = (o, s) =>
        {
            //Do whatever
        }
    }
};
ToolStripMenuItem toolStripMenuItem;
foreach (var mi in menuItems)
{
    ToolStripMenuItem foo = new ToolStripMenuItem(mi.Text);
    foo.Click += mi.Handler;
    foo.Tag = mi.Tag;
    toolStripMenuItem.DropDownItems.Add(foo);
}