を働いていません。
私はあなたがそれ(列挙型?)定義するコードを示さなかったが、それはfalse
以外だ場合、これはあなたが期待するように動作するように行くのではありません。ので、INFOpermission.accessAuthorize
が何であるか見当がつかない
私はあなたがOpening
eventハンドラにfalse
に無効にするToolStripMenuItem
のEnabled
propertyを設定することがを動作することを保証することができます。それはあなたのために働いていない場合、あなたは何か間違っている、あなたは私たちに行くためにいくつかの詳細を与える必要があります。
あなたが立ち往生している場合は、ここではサンプルコードを参照してください。How to: Handle the ContextMenuStrip Opening Event
EDIT:コメントで提供された新しい情報で武装を、私は今、問題の原因を分離しました。 ContextMenuStrip
をDataGridView
コントロールのRowTemplate
に割り当てたため、Opening
イベントハンドラーメソッドでそのコンテキストメニューに含まれる項目を変更することはできません。
これは、誰かが「設計通りに」決定した既知のバグであることが判明しました。元のバグ報告here on Microsoft Connectを見ることができます。説明は、RowTemplate
(つまりRowTemplate
の仕組み)に基づいて新しい行が作成されるたびに、割り当てられたContextMenuStrip
も複製されます。つまり、同じコンテキストメニューインスタンスが各行で使用されず、オリジナルのメニュー項目で設定しようとするプロパティは無効です。
幸いにも、それはまた、私たちに回避策を与えます。すべてのイベントと同様に、Opening
イベントは、sender
パラメータとして開こうとしているContextMenuStrip
の実際のインスタンスを渡します。 このは、変更を表示するためにアイテムを変更する必要のあるコンテキストメニューです。
コードは何ですか?それは次のようになります。
private void contextMenuStrip_Opening(object sender, CancelEventArgs e)
{
ContextMenuStrip cmnu = (ContextMenuStrip)sender;
cmnu.Items[1].Enabled = false;
}
お知らせを、しかし、あなたはそのインデックスによって変更する個々のメニュー項目を参照する必要がありますということ。これは、変更したいメニュー内の項目のゼロベースの位置に過ぎません。新しいインスタンスが新しいコンテキストメニューインスタンスごとに複製されているため、前の手順と同じように、toolStripAuthorize
オブジェクトを使用することはできません。
1.私たちにもっとコードを教えてください。 2.割り当て後にブレークポイントを設定すると、toolStripAuthorizeにEnabledがfalseまたはtrueに設定されていますか? 3. INFOpermission.accessAuthorizeは期待どおりにfalseに設定されていますか? – dzendras