Отключение пункта меню верхнего уровня не отключает детей, несмотря на то, что говорит MSDN?

Согласно http://msdn.microsoft.com/en-us/library/aa984351%28VS.71%29.aspx

Отключение первого или верхнего пункта меню в меню (например, пункта меню «Файл» в традиционном меню «Файл») отключает все пункты меню, содержащиеся в меню. Аналогичным образом, отключение пункта меню, в котором есть элементы подменю, отключает элементы подменю.

Согласно http://msdn.microsoft.com/en-us/library/ms171655.aspx

Отключение пункта меню первого или верхнего уровня в меню отключает все пункты меню, содержащиеся в меню. Аналогичным образом, отключение пункта меню, в котором есть элементы подменю, отключает элементы подменю.

Однако, если я создам новый проект Windows Forms и добавлю следующий код, я все равно могу использовать горячую клавишу для доступа к пункту меню Child, который, согласно MSDN, должен быть отключен.

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 просто ошибается?


person Ecyrb    schedule 01.02.2010    source источник


Ответы (1)


Это ошибка. В классах ToolStripItem много ошибок, они не были исправлены в нужное время (некоторое время после выпуска .NET 2.0), теперь уже поздно. Публикация этих ошибок на сайте обратной связи Connect бесполезна, вам просто предложат посетить форумы MSDN, чтобы найти обходной путь. Думаю, у тебя уже есть такой. Fwiw, вот тот, который соответствует вашему случаю.

person Hans Passant    schedule 01.02.2010