获取.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。