2012-02-26 36 views
1

私のWinformsアプリケーションには、ネストされたサブアイテムを持つToolStripMenuItemがあります。その構造は以下のとおりです。ToolStripMenuItemのネストされたサブメニュー項目をプログラムで有効にする/無効にする方法

ファイル
。+ ...名前を付けて.... + .....ファイル
....................... .....フォルダ
....................ルートフォルダ

「追加する」の下にあります必要に応じてプログラムで「ファイル」、「フォルダ」、および「ルートフォルダ」を有効または無効にすることができます。コード内でこれらのネストされた項目にアクセスするにはどうすればよいですか?

私はToolStripMenuItem.DropDownItems [0]を試みました.Enabled = true \ false;これはメニューのヒアライアッチで 'Add As'やその下のすべてに影響します。

上記のコードでゼロより大きいインデックスを使用すると、「インデックスが範囲外です」というエラーが表示されます。この機能を実現するにはどうすればよいですか?

+0

タイトルに「C# - 」などのプレフィックスを付けないでください。それがタイトルです。 –

+4

あなたは十分に深く進んでいません。簡単な方法は、Winformsデザイナーが生成する名前付き変数を使用することです。 –

答えて

3

Hansさんのコメントによると、間違ったDropDownItemsコレクションを参照しています。

インデックスを使用してこれを行うには、すばやく醜いでしょう。

それはちょうど「その」メニューのコレクションを親メニューとループを参照するために簡単です:ここでは

private void toggleMenu_Click(object sender, EventArgs e) { 
    foreach (ToolStripMenuItem toolItem in addAsToolStripMenuItem.DropDownItems) { 
    toolItem.Enabled = !toolItem.Enabled; 
    } 
} 

はあなたのメニュー構造を再配置するために、後に決めた場合は維持することは困難であろう醜い方法で、次のとおりです。

foreach (ToolStripMenuItem toolItem in ((ToolStripMenuItem)((ToolStripMenuItem)menuStrip1.Items[0]).DropDownItems[0]).DropDownItems) { 
    toolItem.Enabled = !toolItem.Enabled; 
    } 
+0

ありがとうございます。あなたはあなたの答えを編集して、「醜い、早く」の例を教えてもらえますか? –

+0

@TheThingあなたが*行うべきではない方法を加えました。 – LarsTech

+0

あなたが冗談を言っていないのを見ました:-) –

5

単に自分の名前などでサブ項目を参照:私は何かが欠けていない限り

FileToolStripMenuItem.Enabled = false; 
FolderToolStripMenuItem.Enabled = false; 
RootFolderToolStripMenuItem.Enabled = false; 

、これは最も簡単な答えのように思えます。

+0

ご返信ありがとうございます。 –

関連する問題