Правильный способ получить владелец toolstrip элемента toolstrip в .net, winforms - PullRequest
1 голос
/ 13 февраля 2010

Я обнаружил, что, пытаясь найти владеющую инструментальную полоску предмета, это было не так просто, как просто посмотреть на владельца предмета. Ниже приведен псевдокод, который, я думаю, должен работать. Кто-нибудь может увидеть какие-либо проблемы с этим или он должен работать во всех случаях?

(1) Является ли тип Item.Owner ToolStrip?

(2) Да, вернуть товар. Владелец

(3) Нет, Item = Item.OwnerItem. Перейти к (1).

ETA:

Я бы хотел сделать тест общим тестом. Поэтому вместо того, чтобы тестировать ToolStrip, я должен тестировать ToolStrip, MenuStrip, StatusStrip или ContextMenuStrip.

Что отличает вышеупомянутые 4 от других производных элементов управления, таких как ToolStripDropDown, ToolStripDropDownMenu и ToolStripOverflow?

ETA2: Игнорировать, абсолютный карп!

Насколько я могу судить, это как-то связано с Control.TopLevelControl. Три вышеуказанных элемента управления, которые нельзя добавить в форму, возвращают элемент TopLevelControl. 4 допустимых элемента управления ничего не возвращают для TopLevelControl перед добавлением в форму, а затем и саму форму после добавления.

Ответы [ 3 ]

4 голосов
/ 13 февраля 2010

Это сработало:

        ToolStrip owner = testToolStripMenuItem.Owner;
        while (owner is ToolStripDropDownMenu)
            owner = (owner as ToolStripDropDownMenu).OwnerItem.Owner;
1 голос
/ 13 февраля 2010

Если вы обрабатываете событие щелчка для элемента раскрывающегося меню следующим образом:

 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;
 }
0 голосов
/ 13 февраля 2010

Попробуйте item.Parent вместо item.Owner.

...