2009-06-02 42 views
4

私はshowメソッドを使用してコントロールにSystem.Windows.Forms.Tooltipを手動で表示していますが、現在ツールチップが表示されているかどうかを検出するにはどうすればよいですか?ツールチップが表示されているかどうかを検出しますか?

表示方法を変更する必要がある場合は、問題ありません。

+0

.Net 3.0または3.5を使用している場合は、そのためのフラグIsOpenがあります。 2.0フレームワークでは、私はToolTip.Activeが役に立ちそうだと思います。確かに。 – danish

+0

'IsOpen'はWPFツールチップ上のプロパティであり、winformsツールチップ上のプロパティではありません。 – Xilconic

+0

ToolTip.Activeプロパティは、ツールヒントが表示されているかどうかに依存しません。しかし、あなたのコードはコードを変更するまで、あなたのコードがそれを維持します。 –

答えて

9

あなたはToolTip.GetToolTip(制御)してみてください、と返された値は、次のように、空の文字列でないかどうかを確認できます。

if (!string.IsNullOrEmpty(myToolTip.GetToolTip(myControl))) 
{ 
    // Victory! 
}
+1

'GetToolTip'(winformsのテスト済み)は' SetToolTip'メソッドが 'Control'に対して呼び出されたかどうかだけをチェックします。その場合は、ツールチップが表示されているかどうかに関係なく、テキストが返されます。私が見た限りでは、 'GetToolTip'の戻り値と' Show'が呼び出された場合の間には関係がありません。 – Xilconic

+2

この受け入れられた答えは間違っています。これは、ツールヒントが現在表示されているかどうかを示すものではなく、コントロールのツールヒントのテキスト値のみを取得します。 –

1

これはおそらく示すことができる唯一のツールチップである場合には、トミーのを使用溶液。ツールチップがあなたのコントロールの外にある場合は、それらのいずれかがある場合

、あなたはすべてのツールチップウィンドウを列挙してチェックすることができ

A)フォーム/アプリケーションの境界内

B)に示す

やや

Native.EnumWindows ew = new Native.EnumWindows(); 
ew.GetWindows(); 


foreach (EnumWindowsItem item in ew.Items) 
{ 
    //find all windows forms tooltips currently visible 
    if (item.ClassName.StartsWith("WindowsForms10.tooltips_class32") && item.Visible) 
    { 
     //check if tooltip is on within form bounds 
     if (item.Location.X >= this.Location.X && item.Location.Y >= this.Location.Y && 
      item.Location.X <= this.Location.X + this.Width && 
      item.Location.Y <= this.Location.Y + this.Height) 
     { 
      //Tooltip currently shown within form bounds 
     } 
    } 

} 

EnumWindows相互運用ラッパーのthis codeを使用してこのような。 それはちょっとしたハックだし、もしTommyの解決策があなたのために働くならば、それは多くはです。

+0

ラッパーコードのリンクが壊れています。 – ThunderGr

2

私はタイマーと追跡MouseMovedで自分自身を構築したビルトインのツールチップに非常に問題がありました。

関連する問題