Windows Forms - ToolStripItem Свойство Visible всегда имеет значение false
Я работаю над MDI Windows Forms
приложение. Моя родительская форма имеет ToolStrip
меню и некоторые ToolStripDropDownButtons
, Я хочу изменить Visible
собственность ToolStripDropDownButton
или к некоторым из ToolStripItems
(вспомогательные кнопки), которые он имеет в соответствии с разрешением пользователя.
Вот часть метода, который я написал для управления этим:
private void SetToolStripDropDownVisibility(ToolStripDropDownButton mainBtn, params ToolStripItem[] item)
{
mainBtn.Visible = false;
foreach (ToolStripItem tempItem in item)
{
tempItem.Visible = true;
}
}
Я передаю в качестве первого аргумента ToolStripDropDownButton
и все остальные "вспомогательные кнопки" в виде списка параметров. Однако, когда я вхожу в режим отладки в части foreach (ToolStripItem tempItem in item)
tempItem
Видимое свойство помечено как ложное. Однако в конструкторе это свойство имеет значение true. Вы можете видеть, что я даже пытаюсь явно изменить значение на true - tempItem.Visible = true;
но кажется, что эта линия ничего не делает. Значение Visible
остатки false
и я не могу это изменить.
Это только начало метода, и я не могу думать о другом коде, который может испортить ToolStrip
Предметы. Я пытался изменить значение mainBtn.Visible
к истинному или ложному мышлению, что, возможно, есть какая-то связь, но, похоже, это не проблема Так что любая идея, почему это происходит, почему я не могу изменить Visible
ценность и, конечно, любой способ сделать это.
2 ответа
Решение простое, но не очевидное. Когда мы должны работать с ToolStripItems
которые являются частью ToolSTripDropDownButton
и решить проблему видимости, как мы привыкли решать обычные кнопки, которые мы должны использовать Available
имущество. Он предназначен именно для этой цели. Надеюсь, что кто-то потратит меньше времени на решение этой проблемы, прочитав это!
Следующее пройдет через все toolstripitems
в menuStrip1
:
List<ToolStripMenuItem> allItems = new List<ToolStripMenuItem>();
foreach (ToolStripMenuItem toolItem in menuStrip1.Items)
{
allItems.Add(toolItem);
//add sub items
allItems.AddRange(GetItems(toolItem));
}
foreach (ToolStripMenuItem item in allItems)
{
//make your toolstripMenuItem invisible or whatever you want to do with it.
}
allItems.Clear();
+ Изменить menuStrip1
к тому, что вы называете toolstrip
,