2

http://msdn.microsoft.com/en-us/library/aa984351%28VS.71%29.aspxによると

メニューの最初または最上位のメニュー項目(たとえば、従来のファイルメニューの「ファイル」メニュー項目)を無効にすると、メニューに含まれるすべてのメニュー項目が無効になります。同様に、サブメニュー項目があるメニュー項目を無効にすると、サブメニュー項目が無効になります。

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は間違っていますか?

4

1 に答える 1

2

バグです。ToolStripItem クラスには多くのバグがあり、適切な時期 (.NET 2.0 のリリース後) には修正されていませんでしたが、今では手遅れです。これらのバグを Connect フィードバック サイトに投稿しても役に立ちません。MSDN フォーラムにアクセスして回避策を見つけるように指示されるだけです。あなたはすでに1つ持っていると思います。Fwiw、これがあなたのケースに一致するものです

于 2010-02-01T18:37:49.560 に答える