获取.net中工具条项目的所有者工具条的正确方法,winforms

我发现在尝试找到项目的拥有工具条时,仅仅查看项目的所有者并不容易。 下面是一些我认为应该有效的伪代码。 任何人都可以看到任何问题,或者它是否适用于所有情况?

(1)Item.Owner是ToolStrip的类型吗?

(2)是,退货.Owner

(3)否,Item = Item.OwnerItem。 转到(1)。

ETA:

我想让测试成为一般测试。 因此,我应该测试ToolStrip,MenuStrip,StatusStrip或ContextMenuStrip,而不是测试ToolStrip。

是什么让上面提到的4与其他ToolStrip派生控件不同,例如ToolStripDropDown,ToolStripDropDownMenu和ToolStripOverflow?

ETA2:忽略,绝对鲤鱼!

据我所知,它与Control.TopLevelControl有关。 上面的3个控件无法添加到表单中返回自己的TopLevelControl。 在添加到表单之前,4个有效控件不返回TopLevelControl,然后在添加之后返回表单本身。

这工作:

ToolStrip owner = testToolStripMenuItem.Owner; while (owner is ToolStripDropDownMenu) owner = (owner as ToolStripDropDownMenu).OwnerItem.Owner; 

如果您正在处理下拉菜单项的单击事件,如下所示:

  private void testItemToolStripMenuItem_Click(object sender, EventArgs e) { ToolStripDropDownItem item = sender as ToolStripDropDownItem; ToolStripDropDown menu = item.DropDown; ToolStripItem ownerItem = item.OwnerItem; ToolStrip toolStrip = item.Owner; } 

尝试item.Parent而不是item.Owner。