4

ツールチップを作成しました。このツールチップは、ツールチップの show メソッドを呼び出してマウスがアイコンの上にあるときに表示されます。このツールチップが現在表示されているかどうかを知りたいです。これを行う方法?もしかして反省から?

System.Reflection.FieldInfo fi = typeof(ToolTip).GetField("window", BindingFlags.NonPublic | BindingFlags.Instance);
fi.GetValue(someObject...) ...

表示されている場合はリクエストしますか?

4

1 に答える 1

3

ToolTip クラスは、ツールヒントの表示を開始する直前に Popup イベントを発生させます。これは、TT が表示される期間の開始と見なすことができます。そのスパンの終わりは、2 つのことのうちの最初のものです。ToolTip が表示されていたコントロールの MouseLeave イベント。これは、ユーザーが ToolTip を表示していたものにマウスを向けていないことを示します。または、バルーンがフェードアウトした後の ToolTip の AutoPopDelay 期間の経過.

したがって、フォーム内のコードまたは ToolTip を含む他のコントロールでこれを処理できます。次のようになります。

private System.Windows.Forms.Timer ToolTipTimer = new Timer();

public MyControl()
{
    myToolTip.Popup += ToolTipPopup;
    ToolTipTimer.Tick += ToolTipTimerTick;
    ToolTipTimer.Enabled = false;
}

private bool IsToolTipShowing { get; set; }

private Control ToolTipControl { get; set; }

private void ToolTipPopup(object sender, PopupEventArgs e)
{
   var control = e.AssociatedControl;

   //optionally check to see if we're interested in watching this control's ToolTip    

   ToolTipControl = control;
   ToolTipControl.MouseLeave += ToolTipMouseLeave;
   ToolTipAutoPopTimer.Interval = myToolTip.AutoPopDelay;
   ToolTipTimer.Start(); 
   IsToolTipShowing = true;
}

//now one of these two should happen to stop the ToolTip showing on the currently-watched control
public void ToolTipTimerTick(object sender, EventArgs e)
{
   StopToolTip();
}

public void ToolTipMouseLeave(object sender, EventArgs e)
{
   StopTimer();
}

private void StopTimer()
{
   IsToolTipShowing = false;
   ToolTipTimer.Stop();
   ToolTipControl.MouseLeave -= ToolTipMouseLeave;
}
于 2012-11-14T22:04:12.577 に答える