2013-03-28 1 views
7

Я работаю над приложением MDI Windows Forms. В моей родительской форме есть меню ToolStrip и некоторые ToolStripDropDownButtons. Я хочу изменить свойство VisibleToolStripDropDownButton или на некоторые из ToolStripItems (дополнительные кнопки), которые он имеет, соответственно, с разрешения пользователя.Windows Forms - ToolStripItem Видимое свойство всегда установлено на false

Вот часть метода, который я написал, чтобы справиться с этим:

private void SetToolStripDropDownVisibility(ToolStripDropDownButton mainBtn, params ToolStripItem[] item) 
{ 
    mainBtn.Visible = false; 
    foreach (ToolStripItem tempItem in item) 
    { 
     tempItem.Visible = true; 
    } 
} 

Я передаю в качестве первого аргумента ToolStripDropDownButton и все другие «суб кнопки» в качестве списка Params. Однако, когда я попадаю в режим отладки в части foreach (ToolStripItem tempItem in item), tempItem Видимое свойство помечено как ложное. Однако в дизайнере это свойство имеет значение true. Вы можете видеть, что я даже пытаюсь явно изменить значение на true - tempItem.Visible = true;, но кажется, что эта строка ничего не делает. Значение Visible остается false, и я не могу его изменить.

Это только начало метода, и я не могу думать о другом коде, который может испортить элементы ToolStrip. Я попытался изменить значение mainBtn.Visible на истинное или ложное мышление, возможно, есть какая-либо связь, но, похоже, это не проблема. Поэтому любая идея, почему это происходит, почему я не могу изменить значение Visible и, конечно, любой способ сделать это.

+0

изменение «предмета» на «предметы» не наносит вреда и улучшит удобочитаемость. – David

ответ

17

Решение легко и не очевидно. Когда нам нужно работать с ToolStripItems, которые являются частью ToolSTripDropDownButton и решают проблему видимости так, как мы привыкли ее решать обычными кнопками, мы должны использовать свойство Available. Он предназначен именно для этой цели. Надеюсь, что кто-то потратит меньше времени на решение этой проблемы, прочитав это!

+5

Это не так, как это работает. Доступные и видимые * почти * идентичные свойства, а настройка одна изменяет другую. Но с одним отличием свойство Visible возвращает true только тогда, когда пользователь может видеть элемент. Что никогда не будет иметь место в вашем конструкторе форм или событии Load, форма еще не видна. Так что высокие шансы на то, что с вами не было реальной проблемы, вы просто смутились тем, что сказал вам отладчик. –

+0

Проблема заключалась в том, как во время выполнения определить, что видно, и что не для определенного пользователя из-за его прав. Если какой-либо 'ToolStripItem' доступен, тогда' DropDownButton' должен быть видимым, если нет 'ToolStripItem', доступного для пользователя,' DropDownButton' также должен быть скрыт. Использование свойства 'Visible' здесь не помогает, потому что, как вы сказали, он всегда будет возвращать false, а мой' DropDownButton' всегда будет скрыт. Но если я установил свойство «Доступно», тогда все будет в порядке. – Leron

+1

Спасибо, что ваше решение решило мою проблему – Henry

1

Ниже будет идти корыто все 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.

+0

Проблема не в том, что я не могу составить список своих элементов «ToolStrip». Я хочу, чтобы проблема заключалась в том, что у них «Visible» установлено значение false, и я не могу найти способ изменить его на true. 'item.Visible = true' оставляет элемент невидимым и в режиме отладки значение видимого после этой строки остается ложным, хотя я только что установил его в true. – Leron

+0

Thats odd, код работает для меня ... – Max

 Смежные вопросы

  • Нет связанных вопросов^_^