0

TreeView、ListBox、または私のグーグル検索からスクロールバーで何かを検索しているように見えますが、スクロールバーはコントロールの一部とは見なされません。

カスタム コントロールに入れている TreeView があり、それは Dock Fill です。そこで、それを 1 か所で管理するためのすべてのロジックを持つカスタム TreeView として機能します。

私たちのプログラムの一部では、MouseEnter イベントに基づいてスライド アウトし、MouseLeave イベントでスライドして戻しますが、現在、これにはサード パーティ ライブラリの TreeView を使用しており、これを置き換える作業が行われています。

そのため、すべてを Windows TreeView に移動しましたが、スクロールバーを含めて TreeView 全体をそのままにしておくと、MouseLeave のみを確実にキャプチャする方法が見つかりません。

いくつかのピクセルでパネルをラップし、パネルの MouseLeave をキャプチャするというハックな解決策を見たことがありますが、これが Microsoft がこの状況で私たちに意図したことであるとは信じがたいです。

要するに:

ScrollBar はコントロールに対して MouseEnter または MouseLeave を起動しません。これにより、ユーザーが ScrollBar を使用できないため、コントロールをスライドさせるために MouseEnter/MouseLeave を使用できなくなります。

この状況を処理するための好ましい方法は何ですか?

4

2 に答える 2

1

リストボックスの下に、スクロールバーを含むリストボックスの正確なサイズのパネルを配置します。次に、mouseleaveイベントをパネルに配置します。

于 2010-11-10T07:36:11.150 に答える
1

Spy++ を起動し、ツリービュー ウィンドウを選択します。スクロールバー上でマウスを動かします。そこにはたくさんのアクティビティがあり、WM_NCMOUSEMOVE は私には良いもののように見えます。WndProc() オーバーライドでキャッチします。

于 2010-01-08T00:22:51.460 に答える