2

ボタンの上にカーソルを置いたときにツールチップを表示したいのですが、マウスがボタンの上にある限り、ツールチップはマウスに追従する必要があります。それを達成する正しい方法は何ですか?

更新されたマウスの位置で tooltip.Show(...) を呼び出す MouseMove イベントを追加すると、非常にちらつき、マウスが休むとツールチップが再描画されます。また、OwnerDraw ツールチップの場合、デフォルトのシステム ツールチップ スタイルが自己描画ツールチップと「格闘」していることがわかります。

4

3 に答える 3

10

実際、.Net 2.0 では ToolTip オブジェクトが変更されています。2.0 より前では、ToolTip がアクティブなときに ToolTip テキストが変更されたとき、またはその他の状況で、いくつかの不整合の問題がありました。2.0 以降、現在アクティブなツールチップに影響を与える可能性のある何かが発生するたびに、ツールチップが非表示になります。

これによりいくつかの問題が解決されましたが、SetToolTip() などの直後にいくつかのイベントが発生するようになりました。この関数がこのイベント内から呼び出された場合でも、マウスがマウスから離れるまで ToolTip の描画/非表示の無限ループが発生します。ツールチップ領域。

私自身の回避策は、ToolTip が既に同じかどうかを確認し、そうであれば Set ToolTip() を省略することです。(上記のように静的フラグで単に次のイベントを省略すると、直後に新しいイベントが発生するという保証がないため、問題が発生する可能性があります。たとえば、マウスがツールヒント領域に触れたばかりで、すでに離れている場合などです)。

また、Tooltip を表示するためだけに OnMouseHover を使用すると、ToolTip コンポーネントの内部タイマー機能が無効になるだけでなく、多くの不要なイベントが発生するため、プロセッサ時間が浪費されます。ToolTip コンポーネントの Popup Event は、アクション ポイントとして適切に機能します。

ただし、この特殊なケースでは、マウスの動きを追跡するために OnMouse Hover が必要です。とにかく、ツールチップの位置を変更すると、ツールチップが完全に再描画され、ちらつきます。これは、マウスの位置が 2 つのイベント間で変化したかどうかを確認することで、動かないマウスの場合に減らすことができます。残念ながら、ToolTip コンポーネントには ToolTip の位置を変更する方法がなく、常に現在のマウス位置を基準にして表示されます。したがって、マウスに追従させる唯一の方法は、マウスを閉じて再描画することです。

UseFading および/または UseAnimation プロパティを false に設定すると、ちらつきをさらに減らすことができる場合があります。

于 2009-05-14T15:32:10.937 に答える