如何在单击表单的菜单条组件时识别表单的活动实例

本文关键字:表单 识别 实例 活动 组件 菜单 单击 | 更新日期: 2023-09-27 18:35:03

我正在为MDI应用程序构建一种原型。我有一个主窗体,称为mainForm,以及其他一些子窗体,都是子窗体类的实例。我的childForm类的这些实例都有一个基本的MenuStrip,有一些form''close,print等工具StripMenuItems。

在单击时,如何识别子窗体类的哪个实例正在保存激活的工具条带菜单项?

编辑:以下破折号评论

伪代码如下所示:

Form myNewForm = new Form()
MenuStrip myNewMenu = new MenuStrip()
...
myNewForm.Controls.Add(myNewMenu)
myNewForm.MainMenuStrip = myNewMenu

如何在单击表单的菜单条组件时识别表单的活动实例

鉴于我的原始评论和您的更新,以下内容对我有用:

  Form newChildForm = new Form();
  newChildForm.Name = "ChildForm";
  MenuStrip newMenu = new MenuStrip();
  ToolStripItem newItem = newMenu.Items.Add("New Item");
  newItem.Click += new EventHandler(newItem_Click);
  newChildForm.Controls.Add(newMenu);
  newChildForm.MainMenuStrip = newMenu;
  newChildForm.Show();

然后,在事件处理程序中:

void newItem_Click(object sender, EventArgs e)
{
  ToolStripItem clickedItem = sender as ToolStripItem;
  MenuStrip parentMenu = clickedItem.Owner as MenuStrip;
  Form childForm = parentMenu.FindForm() as Form;
  //childForm.Parent is also "ChildForm";
}

你有什么不同的事情吗?

点赞破折号,这应该作为答案发布。

我将假设您在菜单项的单击事件中...

Control s = sender as Control;//the sender object from the click event
ChildForm activeForm = s.FindForm() as ChildForm;

这将提供您要查找的表单的特定实例。

或者,按钮单击事件应从 ChildForm 类本身实现,这意味着在任何单击事件期间,"this"运算符实际上应该是正在激活的 ChildForm 类的特定实例。

ChildForm activeForm = this;

这是一个完全不必要的任务,但确实说明了这一点。 如果您的菜单条位于其他某个自定义用户控件容器上,则不会发生这种情况,在这种情况下,您将需要这样的东西。

ChildForm activeForm = this.ParentForm;

ParentForm 属性对于"ContainerControl"是唯一的,该属性定义为可以包含其他控件的控件,它标识显示容器的基本"窗体"。