Подтвердить что ты не робот

С# - получить родительский элемент ToolStripMenuItem

Как определить родительский элемент ToolStripMenuItem? С обычным MenuStrip все, что вам нужно сделать, это использовать свойство Parent, но не похоже, что свойство ToolStripMenuItem имеет это свойство. У меня есть ToolStripDropDownButton, у которого есть пара инструментов ToolStripMenuItems, и я хотел бы иметь возможность точно определить родительскую часть этих программ.

4b9b3361

Ответ 1

Попробуйте OwnerItem свойство.

Ответ 2

Это работает для меня:

ToolStripMenuItem menuItem = sender as ToolStripMenuItem;

ToolStrip toolStrip = menuItem.GetCurrentParent();

... из этого вы можете придумать метод, который приведет вас к случайному инструменту ToolStripMenuItem на самый верхний уровень, например:

public static class ToolStripItemExtension
{
    public static ContextMenuStrip GetContextMenuStrip(this ToolStripItem item)
    {
        ToolStripItem itemCheck = item;            

        while (!(itemCheck.GetCurrentParent() is ContextMenuStrip) && itemCheck.GetCurrentParent() is ToolStripDropDown)
        {
            itemCheck = (itemCheck.GetCurrentParent() as ToolStripDropDown).OwnerItem;
        }

        return itemCheck.GetCurrentParent() as ContextMenuStrip;
    }
}

Ответ 3

Попробуйте это.....

ToolStripMenuItem t = (ToolStripMenuItem)sender;
ContextMenuStrip s = (ContextMenuStrip)t.Owner;
MessageBox.Show(s.SourceControl.Name);

Ответ 4

Вот что вы ищете

private void ContextMenuStrip_Opening(object sender, CancelEventArgs e)
{
    contextMenuStrip1.Tag = ((ContextMenuStrip)sender).OwnerItem;
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
    ToolStripMenuItem senderItem = (ToolStripMenuItem)sender;
    var ownerItem = (ToolStripMenuItem)((ContextMenuStrip)senderItem.Owner).Tag;
}