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,

Другие вопросы по тегам