toolStripAuthorize.Enabled
またはのいずれかtrue
に設定する必要がありますfalse
。
それを定義するコード(列挙型?)を示していないので何INFOpermission.accessAuthorize
が何なのかわかりませんが、それが 以外の場合false
、期待どおりに機能しません。
無効にしたいのEnabled
プロパティをイベントハンドラに設定すると、動作することを保証できます。うまくいかない場合は、別のことをしている可能性があります。続行するには、さらに情報を提供する必要があります。ToolStripMenuItem
false
Opening
行き詰まっている場合は、次のサンプル コードを参照してください:方法: ContextMenuStrip オープニング イベントを処理する
編集:コメントで提供された新しい情報を武器に、問題の原因を特定しました。コントロールの にを割り当てたContextMenuStrip
ため、そのコンテキスト メニューに含まれる項目をそのイベント ハンドラー メソッドで変更できません。RowTemplate
DataGridView
Opening
これは、誰かが「設計による」と判断した既知のバグであることが判明しました。元のバグ レポートは、Microsoft Connect で参照できます。与えられた説明は、に基づいて新しい行が作成されるたびにRowTemplate
(これがどのようにRowTemplate
機能するか)、ContextMenuStrip
割り当てた も複製されるということです。つまり、各行で同じコンテキスト メニュー インスタンスが使用されるわけではなく、元のメニュー項目に設定しようとしたプロパティが無効になります。
幸いなことに、回避策も提供されます。すべてのイベントと同様に、このイベントは、開こうOpening
としている の実際のインスタンスをパラメーターContextMenuStrip
として渡しsender
ます。これは、変更を表示するために変更する必要がある項目のコンテキスト メニューです。
それで、コードは何ですか?次のようになります。
private void contextMenuStrip_Opening(object sender, CancelEventArgs e)
{
ContextMenuStrip cmnu = (ContextMenuStrip)sender;
cmnu.Items[1].Enabled = false;
}
ただし、変更する個々のメニュー項目をそのインデックスで参照する必要があることに注意してください。これは、変更するメニュー内の項目のゼロベースの位置です。toolStripAuthorize
新しいコンテキスト メニュー インスタンスごとにオブジェクトの新しいインスタンスが複製されているため、以前にしようとしていたようにオブジェクトを使用することはできません。