2010-02-01 73 views
2

http://msdn.microsoft.com/en-us/library/aa984351%28VS.71%29.aspx禁用頂層菜單項不會禁用子項,儘管MSDN說什麼?

禁用菜單中的第一或頂層菜單項(例如,在傳統的文件菜單中的「文件」菜單項)禁止所有包含在菜單中的菜單項。同樣,禁用具有子菜單項的菜單項會禁用子菜單項。

根據http://msdn.microsoft.com/en-us/library/ms171655.aspx

禁用菜單中的第一或頂級菜單項禁用所有包含在菜單中的菜單項。同樣,禁用具有子菜單項的菜單項會禁用子菜單項。

但是,如果我創建一個新的Windows窗體項目並添加以下代碼,我仍然可以使用快捷鍵來訪問,根據MSDN,應該被禁用Child菜單項。

public Form1() 
{ 
    InitializeComponent(); 

    // Main menu 
    MenuStrip mainMenu = new MenuStrip(); 
    this.Controls.Add(mainMenu); 

    // Top Level menu 
    ToolStripMenuItem topLevelMenuItem = new ToolStripMenuItem("&Top Level"); 
    mainMenu.Items.Add(topLevelMenuItem); 

    // Child menu item 
    ToolStripMenuItem childMenuItem = new ToolStripMenuItem("&Child...", null, (o, e) => MessageBox.Show("Doing something.")); 
    childMenuItem.ShortcutKeys = Keys.Control | Keys.C; 
    childMenuItem.ShortcutKeyDisplayString = "Ctrl + C"; 
    topLevelMenuItem.DropDownItems.Add(childMenuItem); 

    // Menu item to toggle the Top Level menu's Enabled property 
    mainMenu.Items.Add(new ToolStripMenuItem("Toggle Enable for Top Level menu", null, (o, e) => 
    { 
     topLevelMenuItem.Enabled = !topLevelMenuItem.Enabled; 
     MessageBox.Show("topLevelMenuItem.Enabled = " + topLevelMenuItem.Enabled + Environment.NewLine + "childMenuItem.Enabled = " + childMenuItem.Enabled); 
    })); 
} 

我可以看到childMenuItem.Enabled沒有改變所有,而topLevelMenuItem.Enabled一樣。

當然,我可以使用for循環來禁用Top Level菜單下的所有菜單項,或者甚至禁用Child菜單項,但根據MSDN我不應該這樣做。這是怎麼回事?我錯過了什麼,誤解了什麼,或者MSDN錯了嗎?

回答

2

這是一個錯誤。 ToolStripItem類中存在很多錯誤,當時間正確時(在.NET 2.0發佈後的一段時間)它們並沒有修復,現在已經太晚了。將這些錯誤發佈到Connect反饋網站並沒有用處,他們只會告訴您訪問MSDN論壇以找到解決方法。我想你已經有一個。 Fwiw,here's one匹配你的情況。