Отключение пункта меню верхнего уровня не отключает дочерние элементы, несмотря на то, что MSDN говорит? - PullRequest
2 голосов
/ 01 февраля 2010

Согласно 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 просто не так?

1 Ответ

2 голосов
/ 01 февраля 2010

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

...