Поиск скрытого компонента (Visible = false)

97
28 августа 2019, 12:50

После InitializeComponent(); скрываю пункты MenuStrip. Делаю это следующим образом:

string[] elementNames = new string[] {"name1", "name2", "name3"}
foreach (var name in elementNames)
{
    var menu_item = msMainMenu.Items.Find(name, true);
    menu_item[0].Visible = false;
}

Далее, когда я хочу показать какой либо пункт меню, поиск не находит этот элемент т.е.:

var menu_item = msMainMenu.Items.Find("name1", true);
(menu_item.Count() == 0) = true;

Конечно, как вариант, элементы, на которые изначально воздействовал цикл, можно убрать в массив, затем обращаться уже к нему. Но есть ли ещё какие-нибудь варианты получить экземпляр компонента имея только его имя ToolStripMenuItem.Name и при ToolStripMenuItem.Visible = false?

Answer 1

Приведите просто к нужному типу.

Например код скрытия можно написать так:

string[] elementNames = { "name1", "name2", "name3" };
foreach (ToolStripItem item in msMainMenu.Items)
{
    item.Visible = !elementNames.Contains(item.Name);
}

А обратиться к определенному объекту так:

var item = msMainMenu.Items.Cast<ToolStripItem>().FirstOrDefault(x => x.Text == "name1");
if (item != null) item.Visible = true;

Везде как видите стоит ToolStripItem - это тот объект, который содержится в MenuStrip, значит смело указываем нужный тип и работаем с объектом на прямую, без Find().

Если же вы хотите работать с Find, то смотрите что именно этот метод вам возвращает.
Строка var menu_item = msMainMenu.Items.Find("name1", true); вернет вам ToolStripItem[], то есть массив объектов и если вы уверены, что там будет один ваш объект с нужным именем, то обращайтесь через индекс (menu_item[0].Visible = true;) или берите с помощью LINQ первый объект (menu_item.FirstOrDefault().Visible = true;). Не забудьте только обработать вариант с NULL!

READ ALSO
Нужен простой конвертер byte[] to Image WPF

Нужен простой конвертер byte[] to Image WPF

Есть бд MSSQL в ней таблица в которой в поле Logo типа Image хранятся изображения формата jpeg(да, я знаю что так делать не есть хорошо но у меня такое...

107
WPF + ссылка на сайт кнопкой

WPF + ссылка на сайт кнопкой

Столкнулся с проблемой в создании ссылки на определенный сайт с помощью кнопки в WPF, можно ли вообще её как-нибудь сделать, или нет? Если можно,...

129
Отправляемые данные ajax post запросом

Отправляемые данные ajax post запросом

Есть модельС формы отправляется ajax запросом несколько полей с такими же названиями как и у свойств модели

119
Изменение цвета кнопки трекбаром через Color.FromArgb C#

Изменение цвета кнопки трекбаром через Color.FromArgb C#

Необходимо правильно масштабировать ползунокЗадача следующая, при перемещении ползунка с диапазоном от 0 до 10 необходимо менять цвет кнопки

140