在.net、winforms中获取toolstrip项的所有者toolstrip的正确方法

Jul*_*les 2 .net c# toolstrip winforms

我发现,在尝试查找某个项目的所属工具条时,这并不像仅查看该项目的所有者那么容易。下面是一些我认为应该有效的伪代码。任何人都可以看到这有什么问题吗?或者它应该在所有情况下都有效吗?

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

(2) 是的,归还 Item.Owner

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

预计到达时间:

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

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

ETA2:无视,绝对的鲤鱼!

据我所知,这与 Control.TopLevelControl 有关。上面的 3 个控件不能添加到表单中,它们返回它们自己的 TopLevelControl。在添加到表单之前,4 个有效控件不会为 TopLevelControl 返回任何内容,在添加之后,也会为表单本身返回任何内容。

Han*_*ant 5

这有效:

        ToolStrip owner = testToolStripMenuItem.Owner;
        while (owner is ToolStripDropDownMenu)
            owner = (owner as ToolStripDropDownMenu).OwnerItem.Owner;
Run Code Online (Sandbox Code Playgroud)