2012-05-05 4 views
1

私は、あなたがPictureBox上にホバリングしているものに応じて変化するテキストでツールチップを作ろうとしています。これは動作しますが、これに伴う問題は、あなたが絵の上に置くと、それは常にツールヒントのちらつきを作るので、私からそれを防ぐために、そのように変更された(混乱を避けるために単純化)ToolTipは、PictureBoxのマウスの動きに反応します。

private ToolTip tt; 

private void Picture_MouseMove(object sender, MouseEventArgs e) 
{ 
    string rollText = 
     <code to determine what text should display based on mouse coordinates> 

    tt.SetToolTip(Picture, rollText); 
} 

:私のコードは次のようなものです必要なときにはない再描画:

private string oldRollText = ""; 
private ToolTip tt; 

private void Picture_MouseMove(object sender, MouseEventArgs e) 
{ 
    string rollText = 
     <code to determine what text should display based on mouse coordinates> 

    if (rollText != oldRollText) 
    { 
     oldRollText = rollText; 
     tt.SetToolTip(Picture, rollText); 
    } 
} 

しかし、あなたがロールアウトして再度ロールまで今それが唯一の一瞬のために表示され、それ以上のときに第1ロールを消え、二度と。私はShowAlways = trueを設定しようとしましたが、の数字の3つすべてが0、Active = trueUseFading = falseUseAnimation = falseというアニメーションの最初のフレームを何度も再生していた場合に備えて、試しました。サイコロはありません。私は何が欠けているすべてのアイデア?

+0

oldRolltext変数も必要ですか?あなたは単に比較のためにツールチップの現在のテキストにアクセスできませんか?また、ロールプレイングの設定方法を簡略化した例を見ると役立ちます。 – Jared

+0

'tt.GetToolTip(Picture)'を使って、同じ結果を試しました。ロールテキストを設定するコードがどのように役立つかは分かりませんが、少し長いので、いくつかのクラスが関わっています。私はちょうど言うでしょう、それはマウスがどこにあるのか、そしてそれらの座標の下にあるものが何であるかを特定し、それに応じて設定します。ツールヒントには触れられず、そのブロックの内容は変更されません。私が実際にツールチップ自体をどのように処理しているかを知るのに役立つかもしれません。私はここで使用しているコードを投稿しました:[http://stackoverflow.com/questions/1165540/how-do-i-remove-a-tooltip-currently-bound-to-a-control/10465827#10465827] –

答えて

0

Use MouseEnterは良い方法だと思います。

private ToolTip tt= new ToolTip(); 

string rollText; 
int mouseX; 
int mouseY; 
private void Picture_MouseEnter(object sender, MouseEventArgs e) 
{ 

    //tt.SetToolTip(Picture, rollText);//option 1 
    tt.Show();//option 2 
} 

private void Picture_MouseMove(object sender, MouseEventArgs e) 
{ 
    mouseX=e.X; 
    mouseY=e.Y; 
    string rollText = ("Mouse position is: X:"+mouseX+" Y:"+mouseY); 
    tt.SetToolTip(Picture, rollText);//option 2 

} 

また、ツールヒントを削除するためにMouseLeaveを使用します。

private void Picture_MouseLeave(object sender, MouseEventArgs e) 
    { 

     tt.Hide(); 

    } 

私はちらつきを取り除くために私たち自身を試してみました。

+0

'tt.Show();'と 'tt.Hide();'は0個の引数を取らない。 'tt.Show(" "、this);と' tt.Hide(this);を使ってみましたが、違いはありません。 'MouseEnter'で' SetToolTip'を行うのは、あなたのマウスの位置に応じてテキストを変更する必要があり、それは入力時に1度しか呼び出さず、決して変更しないためです。 –

+0

私は、変数ShowAlwaysをtrueに設定する必要があると思います。 – devilkkw

+0

それをしました。私はすでに、最初の投稿でそれをしたと言っています。違いはありませんでした。 –