5

ToolTip.Showコントロールを含むウィンドウが非アクティブのときに、で手動で表示されるツールチップが表示されないのはなぜですか?

public class MyControl : Button
{

    private _tip;
    public string ToolTip
    {
        get { return _tip; }
        set { _tip = value; }
    }

    private ToolTip _toolTip = new ToolTip();

    public MyControl()
    {
        _toolTip.UseAnimation = false;
        _toolTip.UseFading = false;
        _toolTip.ShowAlways = true;
    }

    protected override void OnMouseHover(EventArgs e)
    {
        _toolTip.Show(_tip, this, 0, Height);
        base.OnMouseHover(e);
    }

    protected override void OnMouseLeave(EventArgs e)
    {
        _toolTip.Hide(this);
        base.OnMouseLeave(e);
    }
}

ツールチップを画面上に無制限に表示する必要があるためToolTip.Show、通常のToolTip. また、コントロール自体の一部としてツールチップ テキストを表示するというアイデアも気に入っています。残念ながら、非アクティブなウィンドウに対してこの方法でツールチップを表示すると (にもかかわらずShowAlways = true)、単に機能しません。

OnMouseHowerイベントは発生しますが、何_toolTip.Showもしません..ウィンドウがアクティブ化されていない限り、すべてが機能します。

バウンティ

非アクティブなフォームのツールチップを表示するためのソリューションに報奨金を追加します (ツールチップのテキストが ではなくコントロールのプロパティである場合は、ソリューションを使用することをお勧めしますIContainer)。

4

1 に答える 1

6

必要なことを行うプライベート メソッドがあるため、それにアクセスするには、リフレクションを使用して呼び出す必要があります。

using System.Reflection;

public class MyControl : Button {
  private ToolTip toolTip = new ToolTip() {
    UseAnimation = false,
    UseFading = false
  };

  public string ToolTip { get; set; }

  protected override void OnMouseHover(EventArgs e) {
    base.OnMouseHover(e);
    Point mouse = MousePosition;
    mouse.Offset(10, 10);
    MethodInfo m = toolTip.GetType().GetMethod("SetTool",
                           BindingFlags.Instance | BindingFlags.NonPublic);
    m.Invoke(toolTip, new object[] { this, this.ToolTip, 2, mouse });
  }

  protected override void OnMouseLeave(EventArgs e) {
    base.OnMouseLeave(e);
    toolTip.Hide(this);
  }
}

ヒントは非アクティブなウィンドウに表示され、マウスがコントロールから離れるまで無期限に画面に表示されたままになります。

于 2013-10-18T18:49:34.687 に答える