我有一个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时,我想添加菜单项并处理它们的事件。问题是当我使用此代码添加项目时它不起作用但不会出错。我做错了还是我不能以这种方式与menustrip互动。
menuStrip1.Items.Remove(fileToolStripMenuItem);
ToolStripMenuItem Save = new ToolStripMenuItem("Save", null, saveToolStripMenuItem_Click);
fileToolStripMenuItem.DropDownItems.Add(Save);
答案 0 :(得分:0)
Gunnerone拥有它。保留菜单条和表单中的所有事件。在menustripclick添加与特定用户控件相关的菜单项。在UC调用中,为操作定义一个公共方法,并从表单中调用它。这很简单,我一直在思考这个问题。
答案 1 :(得分:0)
完全不同意你的方法......
假设" menuStrip1"被放置在主窗体上并具有完全名称,当您将其添加到UserControl时,您可以访问它"按名称"在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);
}
还有一种方法可以添加到工具条菜单中的现有文件中,还是必须从头开始?
假设"文件"已经被放置在主菜单上并且完全命名为" 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);