1

C# を .Net 2.0 で使用する (問題は 4.0 で発生しますが)

Windows フォームの ToolStrip コントロールと ToolStripControlHosts のフォーカスに関連するバグがあるようです。

次の例を考えてみましょう。ユーザーが ToolStripMenuItem "Test A" をクリックし、マウスを斜めにドロップ ダウン ToolStripMenuItem "5" に移動します。斜めにドラッグすると、マウスは「テスト B」の上を通過しますが、マウスがドロップダウン リストに入ると、フォーカスが「テスト B」から「テスト A」に自動的に戻ります。これは正しく動作します。

例 1 : http://i.stack.imgur.com/0X9mZ.png

同様の例を考えてみますが、ドロップダウン リストに ToolStripControlHost が含まれています。フォーカスを受ける「Test B」の上をマウスが斜めに移動します。マウスが ToolStripControlHost に入ると、フォーカスは親の "Test A" に返されないため、ドロップダウン リストが閉じ、ToolStripControlHost が非表示になります。

例 2 : http://i.stack.imgur.com/XJ75K.png

私の質問は、どうすればこの状況に対処できますか? ToolStripMenuItem "Test A" にフォーカスを強制する方法はありますか?

「テスト A」の DropDown の autoclose プロパティを false に設定してから、クローズ イベントを手動で処理しようとしましたが、これによりいくつかの問題が発生します。ToolStripControlHost がクリックされると、ToolStrip は、ToolStripDropDownCloseReason が AppClicked である OnClose イベントを受け取ります。さらに、ToolStripControlHost 内のテキスト ボックスは、テキスト イベントを受信しません。これは、ToolStrip がそれらを消費しているように見えるためです (バックスペースは、テキストを削除するのではなく、ドロップ ダウン リストでフォーカスを上に移動します)。

ご協力いただきありがとうございます

サイモン

4

1 に答える 1

0

そのため、ToolStrip の DropDown 項目にコントロールを追加したいときに、同様の問題に遭遇しました。このソリューションの最初の部分は、少なくとも私の場合は、必要なものすべてを含むカスタム UserControls を作成することでした。ただし、これを行っても、すべてを LayoutControls に配置するまで、フォーカスの問題が発生しました。すべてが期待どおりに機能し、DevExpress CheckedComboBoxEdit を除いて、フォーカスを取得し、DropDown アイテムにハンドルがないと、フォーカスを失い、失われます。

また、多くのイベントを管理し、AutoClose を false に設定しようとしましたが、他の問題が発生しました。

私の提案は、テキストボックス(および必要に応じて他のアイテム)を含む LayoutControl を使用して UserControl を作成することです。これにより、UserControl の背後にあるコードのテキスト ボックスにフックする追加機能 (イベント、バインディングなど) を配置することもできます。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-10-25T02:46:56.227 に答える