2013-03-28 52 views
7

我正在研究MDI Windows Forms應用程序。我的父母表單有ToolStrip菜單和一些ToolStripDropDownButtons。我想要更改ToolStripDropDownButtonVisible屬性,或者更改ToolStripItems(子按鈕)的某些屬性,以便它相應地獲得用戶的許可。Windows窗體 - 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 Visible屬性被標記爲false。但是在設計器中,該屬性設置爲true。你可以看到,我甚至試圖明確地將該值更改爲true - tempItem.Visible = true;,但看起來好像這條線路什麼都不做。 Visible的值仍然爲false,我無法更改它。

這只是方法的開始,我不能想到其他代碼可以搞砸ToolStrip項目。我試圖將mainBtn.Visible的值更改爲true或false,認爲可能存在任何關聯,但似乎這不是問題。因此,任何想法爲什麼發生這種情況,爲什麼我不能改變價值,當然還有其他任何方式。

+0

將「項目」更改爲「項目」不會造成傷害,並且會提高可讀性。 – David

回答

17

該解決方案很簡單,但並不明顯。當我們必須使用作爲ToolSTripDropDownButton的一部分的ToolStripItems並解決可見性問題時,我們用普通按鈕解決它的方式,我們必須使用Available屬性。它完全是爲此目的而設計的。希望有人花更少的時間通過閱讀這個問題來解決這個問題!

+5

這不是它是如何工作的。 「可用」和「可見」是*幾乎*相同的屬性,設置一個可以改變另一個。但有一點不同,當用戶可以看到該項目時,Visible屬性僅返回true。在您的表單構造函數或Load事件中永遠不會出現這種情況,表單尚不可見。如此高的可能性以至於沒有真正的問題,你只是被調試器告訴你的東西弄糊塗了。 –

+0

問題在於運行時如何確定什麼是可見的,以及由於他的權限而不是某些用戶。如果有任何'ToolStripItem'可用,那麼'DropDownButton'應該是可見的,如果沒有'ToolStripItem'可供用戶使用'DropDownButton'也應該隱藏。使用'Visible'屬性在這裏沒有幫助,因爲正如你所說的那樣,它總是會返回false,並且我的'DropDownButton'將始終隱藏。但是如果我設置'Available'屬性,那麼一切都很好。 – Leron

+1

感謝您的解決方案解決了我的問題 – Henry

1

下面將走線槽所有toolstripitemsmenuStrip1:到無論你怎麼稱呼您toolstrip

  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

+0

問題不在於我無法列出我的ToolStrip項目我想問題是他們將Visible設置爲false,我無法找到將其更改爲true的方法。 'item.Visible = true'使項目不可見,並且在調試模式下,即使我將它設置爲true,該行的值仍然爲false。 – Leron

+0

這很奇怪,代碼正在爲我工​​作... – Max

相關問題