2011-07-29 11 views
0

WinFormsでは、ToolStripのみがToolStripItemではなくContextMenuStripを持つことができます。キーボードでContextMenuStripを開始したToolStripItemを取得する

Iは、ユーザがを指すボタン知っているContextMenuStripを必要とするように、ボタン(ContextMenuStrip.Openningにおけるカーソルの位置を取得し、その後のToolStripからアイテムを取得することにより)マウスで押されたときに、私は解決策を持っているが、私は何の解決策を持っていませんキーボード選択。理論的には、ToolStripのOnKeyDownをキャプチャして、ユーザーアクションによって選択されたアイテムを追跡しようとする可能性がありますが、実際にはToolStripがオーバーフローすると、かなり複雑で信頼性が低くなる可能性があります。

解決方法はありますか?

SOLUTION:

私は少しを果たし、ここでのソリューションです、ContextMenuStrip.Openingハンドラでこれを実行します。キーはいるContextMenuStripを表示するために押されたときに選択された項目を取得するために toolStrip.Items.Cast<ToolStripItem>().Where(x => x.Selected).First()を。

+0

Erm、あなたはどのキーを押してもらえますか?キーボードでツールストリップアイテムに焦点を当てる方法はありません。誰もマウスで項目を選択してからキーを押します。 –

+0

ToolStripにフォーカスがある場合は、矢印キーを使用できます(また、[プロパティ]タブのキーにもよります)、選択したToolStripItemが変更されます。 Enterを押すこともでき、クリックイベントが有効になります。また、ContextMenuのキーを押すと、ContextMenuがアクティブになります。それは問題ではない。問題は、以前に選択されたToolStripItemです。 –

+0

ええと、私はそれを再解析しないので、ToolStripにフォーカスを与えることはできません。あなたが答えが必要な場合は、ファイル共有サービスでこのように動作する小さなreproプロジェクトを投稿することは賢明でしょう。 –

答えて

0

私は少し演奏しましたが、これは解決策です。ContextMenuStrip.Openingハンドラでこれを行います:toolStrip.Items.Cast<ToolStripItem>().Where(x => x.Selected).First() ContextMenuStripを表示するためにキーが押されたときに選択されたアイテムを取得します。

関連する問題