Отключенные пункты меню в Winforms все еще показывают подпункты - PullRequest
0 голосов
/ 27 августа 2010

Если я создаю меню с двумя пунктами (скажем, «Item1» и «Item2», а затем создаю два подпункта под каждым (1A, 1B, 2A и 2B), а затем отключаю Item1, я ожидаю, что 1A и1B не будет отображаться.

И, действительно, если я перейду к Item1, они этого не сделают. Если только я не перейду к Item2, подождите, пока 2A и 2B покажет, а затем вернитесь к Item1.какие точки 1A и 1B оба всплывают, полностью активны.

Это известная ошибка? Это то, что я могу обойти? Любые предложения?

Пользователи хотят видетьвещи, которые в настоящее время отключены, или я бы просто сделал вещи невидимыми. К сожалению, это не вариант, который мы можем легко использовать.

Ответы [ 2 ]

2 голосов
/ 27 августа 2010

Я могу подтвердить, что это происходит с MenuStrip для Framework 2.0, 3.5 и 4.0.Единственный разумный обходной путь, который у меня есть, - установить для свойства Visible значение false, чтобы элемент вообще не появлялся.Не идеально, но лучше, чем иметь доступ к подпунктам.

Конечно, вы также можете создать функцию, которая будет рекурсивно отключать все дочерние элементы. Таким образом, даже если они появляются, они, по крайней мере, отключены, вам нужно будет поддерживать предыдущее состояние, чтобы гарантировать, что вы позжеповторно включить дочерний элемент, который фактически должен быть отключен и т. д. В документации указано, что именно так и происходит, но это не так, подпункты остаются включенными, даже если родительский элемент отключен.

0 голосов
/ 07 мая 2013

Я столкнулся с той же проблемой и хотел бы добавить несколько слов к ответу.Возможно, вы захотите реализовать workaroud, упомянутый Крисом Тейлором, в отдельном элементе управления, унаследованном от пункта меню, и выполнить модульный тест.В этом случае вам нужно будет использовать свойство Available вместо Visible.Вот цитата из http://blog.excastle.com/2008/12/28/fixing-menustrip-part-2-visible-vs-available-and-a-repro-case/

ToolStripMenuItem имеет два свойства видимости: Visible и Available.Они оба делают одно и то же, за исключением случаев, когда они этого не делают.

Чтобы быть более конкретными, оба их сеттера делают одно и то же.Поэтому, если вы хотите скрыть пункт меню, вы можете установить для Visible значение false или для Available для false.То же самое.Итак, почему есть два свойства для одной и той же вещи?

Разница в том, если вы когда-нибудь захотите прочитать свойства, чтобы узнать, скрыт ли уже элемент.Видимый получатель не делает то, что вы хотите.Никогда не используйте это.Чтение Visible не говорит вам «я установил для Visible значение true?» Нет, для этого есть «Доступен».(Очевидно.) Нет, читая Visible, вы узнаете, «есть ли в данный момент всплывающее меню на экране?». При этом показатель полезности где-то меньше или равен грибку пальца ноги.

Резюме: всегда используйте «Доступно».Никогда не используйте Visible.Единственным исключением является конструктор форм. Доступно не отображается в таблице свойств, поэтому вы застряли с Visible.

С уважением,

Макс

...