C# 从表单中的用户控件控制表单中的菜单条

C# Control a Menu strip in a form from a usercontrol in the form

我有一个 windows 表单应用程序,它有一个 Form(form1)、一个 menustrip(menustrip1) 和一个 usercontrol(usercontrol1)。我编写了将用户控件加载到这样的表单中的代码。 UserControl1 UC = new UserControl1(); UC.Dock = DockStyle.Fill; this.Controls.Clear(); UC.Controls.Add(menuStrip1); this.Controls.Add(UC); 然后,当加载 UC 时,我想添加菜单项并处理它们的事件。问题是当我使用此代码添加项目时它不起作用但不会出错。我做错了吗,或者我不能以这种方式与菜单条交互。

menuStrip1.Items.Remove(fileToolStripMenuItem); ToolStripMenuItem Save = new ToolStripMenuItem("Save", null, saveToolStripMenuItem_Click); fileToolStripMenuItem.DropDownItems.Add(Save);

Gunnerone 拥有它。将菜单条和所有事件保留在窗体中。在 menustripclick 中添加与特定用户控件相关的菜单项。在 UC 调用中,为操作定义一个 public 方法,然后从表单中调用它。这很简单,我一直在想这个。

完全不同意你的做法...

假设 "menuStrip1" 被拖放到主窗体上并具有 确切的 名称,当您将它添加到您的 UserControl 时,您可以访问它 "by name" 就像这在 Load() 事件中:

    private void UserControl1_Load(object sender, EventArgs e)
    {
        MenuStrip menu = this.Controls["menuStrip1"] as MenuStrip;

        ToolStripMenuItem File = new ToolStripMenuItem("File", null, fileToolStripMenuItem_Click);
        menu.Items.Add(File);
        ToolStripMenuItem Save = new ToolStripMenuItem("Save", null, saveToolStripMenuItem_Click);
        File.DropDownItems.Add(Save);
    }

还有没有办法添加到工具条菜单附带的现有文件中,或者我必须从头开始吗?

假设 "File" 已经放置在主菜单上并准确命名为 "fileToolStripMenuItem",这将与上面已经接受的代码非常相似。但是,我们不是访问 this.Controls(),而是像这样访问 menu.Items()

        MenuStrip menu = this.Controls["menuStrip1"] as MenuStrip;
        ToolStripMenuItem File = menu.Items["fileToolStripMenuItem"] as ToolStripMenuItem;

        ToolStripMenuItem Save = new ToolStripMenuItem("Save", null, saveToolStripMenuItem_Click);
        File.DropDownItems.Add(Save);