【问题标题】:How to get notified when an Item is added to a ToolStripMenuItem.DropDownItems collection如何在将项目添加到 ToolStripMenuItem.DropDownItems 集合时收到通知
【发布时间】:2013-11-05 22:50:55
【问题描述】:

我正在用 c# 开发一个 MDI 应用程序。合并两个 MenuStrip 时遇到问题:

我有父 Parent Form 及其 MenuStrip parentMenu 和一些 ToolStripMenuItem 元素:Option1Option2

然后我有一个孩子Form 和它的MenuStrip parentMenu 和两个ToolStripMenuItem 元素:Option1OtherOption。这些的合并属性对于 Opcion1 是仅匹配的,对于 OtherOption 是追加的

现在,问题来了:当显示子窗体并将两个 MenuStrip 组合在一起时,将触发事件 parentMenu.ItemAdded,因为 OtherOption 已添加到 parentMenu.Items 集合中。 Option1 不是这种情况。请注意,Option1.DropDownItems(在子窗体中)中可能有一些元素在父窗体中的 Option1.DropDownItems 中不存在。

我如何才能收到有关这些正在添加的项目的通知?

(为了清楚起见:假设parentMenu.Items 只包含一个ToolStripMenuItem Option1,它只包含一个ToolStripMenuItem,比如说'optionA'。假设childMenu.Items 只包含一个ToolStripMenuItem Option1,它只包含ToolStripMenuItem optionB。当两个菜单合并时,我怎样才能得到关于 item optionB 被添加到父项的通知?或者我怎样才能得到关于两个菜单合并的通知,知道哪些元素是新的?)。

【问题讨论】:

  • 我没有得到任何答案有什么原因吗? :S

标签: c# winforms events toolstrip


【解决方案1】:

“MenuStrip 合并将菜单项从一个 ToolStrip 移动到另一个 ToolStrip,而不是像 MainMenu 那样克隆它们。”见here

因为它是移动它们而不是克隆它们,所以请尝试在 ToolStripItem 上的 OwnerChanged 事件。为您的每个项目连接到此事件,当它移动到另一个工具条时它会通知您。

【讨论】:

  • 如果没有完成合并(出于任何其他原因),是否可以触发 OnwerChanged 事件?
  • 是的。如果所有者更改,则事件将触发。例如,您可以手动移动它。但这不是问题,因为您只需查看新所有者并确定它是否已合并(即,如果所有者是 mdiparent 的菜单条,您就知道它已合并)。
  • 仍然感觉不是正确的方法。如果这是唯一的方法,我会将其标记为有效
  • 我知道你想要什么......你想要一个 MenuMerged 事件,它会为你提供已合并项目的列表。不幸的是它不存在。我认为我提到的方式是获得您正在寻找的效果的最简单方法。
  • 我在将答案标记为有效时自动分配。给你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
相关资源
最近更新 更多