如何在单击表单的菜单条组件时识别表单的活动实例
本文关键字:表单 识别 实例 活动 组件 菜单 单击 | 更新日期: 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"是唯一的,该属性定义为可以包含其他控件的控件,它标识显示容器的基本"窗体"。