2011-11-14 8 views
0

私はToolStripDropDownButtonを使用して、動的に以下のようにメニュー項目を追加してい:ToolStripMenuItemとKeyPressイベントまたはKeyDownイベントイベント

toolStripDropDownButton1.DropDownItems.Clear(); 

ToolStripMenuItem item1 = new ToolStripMenuItem("Item1"); 
toolStripDropDownButton1.DropDownItems.Add(item1); 

ToolStripMenuItem item2 = new ToolStripMenuItem("Item2"); 
toolStripDropDownButton1.DropDownItems.Add(item2); 

私はキーが押された削除時に選択したメニュー項目を削除したいと思います。しかしToolStripMenuItemにはKeyPressまたはKeyDownイベントがありません。

私はVisual Studio 2010と.NET 4.0を使用しています。どのようにこの機能を達成するための任意の提案?

+0

「*選択メニュー項目*」はどういう意味ですか? **ホバリング**メニューアイテムですか? – Otiel

+0

はい、ホバーしたメニュー項目です。ありがとう。 – Din

答えて

0

別の削除ボタンをクリックしたときに、ドロップダウンリストから選択したアイテムを削除したいかのように聞こえます。それはあなたがやろうとしていることですか?その場合は、削除ボタンのクリックイベントを調べ、現在選択されているアイテムに基づいてリストアイテムを削除する必要があります。 KeyDownのKeyPressは必要ありません。

+0

削除ボタンはありません。メニュー項目のみをドロップダウンします。 削除キーを押したときに、選択した項目を削除したいと考えています。問題は、ToolStripMenuItemにKeyPressまたはKeyDownイベントがないことです。 提案や回避策はありますか? – Din

+0

ありがとうございます。それから、あなたはそれをすることができません。 ToolStripはすべてのキーボードイベントを処理します。必要な作業を行う唯一の方法は、元のToolStripコントロールから派生した新しいToolStripコントロールを作成し、必要なビットを追加することです。私はあなたが達成しようとしていることを再考するでしょう。 –

+0

あなたのお返事ありがとうございます。簡単に行えない場合は別の方法を使用する必要があります。 – Din

0

あなたのようなものであり、それを扱うことができるように囲むのToolStripがキーイベントを取得します。

toolStripDropDownButton1.KeyDown += (s, e) => 
{ 
    if (e.KeyCode == Keys.Delete) 
    { 
     foreach (var item in ((ToolStrip)s).Items.OfType<ToolStripMenuItem>()) 
     { 
      if (item.Selected) 
      { 
       ((ToolStrip)s).Items.Remove(item); 
       break; 
      } 
     } 
    } 
}; 

(このコードは完全にテストされていない)

私は((ToolStripの)複数可)を使用複数の異なるToolStripインスタンスから呼び出せる静的メソッドを他の場所に定義したい場合に備えて、イベントハンドラの内部に配置します。もちろん、この場合、((ToolStrip)s)toolStripDropDownButton1に置き換えることができます。

0

メニューのDropDown要素を使用して、KeyDownイベントをバインドすることができます。 メニューでどのキーが押されているかを知っていますが、どのメニュー項目がマウスカーソルでポイントされているのか分かりません。 Bind MouseEnterイベントはToolStripMenuItem秒になり、どのポイントがポイントされているかを保存できるようになりました。 DropDownKeyDownイベントがトリガされたときに、どのアイテムがポイントされ、どのキーが押されているかが分かります。

関連する問題