5

カスタム コントロール (C#、ビジュアル スタジオ) があります。mousehover イベントでツールチップを表示したい。

しかし、何をしても表示されないか、複数回表示される可能性があります。

私はそれが次のように簡単だと思った:

private void MyControl_MouseHover(object sender, EventArgs e)
{
    ToolTip tT = new ToolTip();

    tT.Show("Why So Many Times?", this);
}

しかし、これはうまくいきません。私はたくさんのことを試しましたが、それを機能させることができないようです。表示のためにそこからプライベートフィールドにアクセスしたいので、ツールチップをコンポーネントの一部にしたいと思います。

助けてくれてありがとう

4

4 に答える 4

10

コンストラクターでツールチップをインスタンス化し、マウス ホバーで表示しようとしましたか?

public ToolTip tT { get; set; }

public ClassConstructor()
{
    tT = new ToolTip();
}

private void MyControl_MouseHover(object sender, EventArgs e)
{
    tT.Show("Why So Many Times?", this);
}
于 2009-11-03T16:24:59.163 に答える
1

MouseHoverは、マウスがコントロール上を移動するたびに起動されます。したがって、イベントが発生するたびに新しいツールチップを作成しています。そのため、このウィジェットの複数のインスタンスが表示されます。ジョセフの答えを試してみてください

于 2009-11-03T16:33:28.360 に答える
1

デザイナーを使用してツールチップを追加するだけで、質問のコードとは大きく異なるコードが生成されます。

Form1.Designer.cs: (読みやすくするためにプライベート変数をクラスの先頭に移動)

partial class Form1
{
    private System.ComponentModel.IContainer components = null;
    private System.Windows.Forms.Label label1;
    private System.Windows.Forms.ToolTip toolTip1;

    // ...

    private void InitializeComponent()
    {
        this.components = new System.ComponentModel.Container();
        this.label1 = new System.Windows.Forms.Label();
        this.toolTip1 = new System.Windows.Forms.Tooltip(this.components);

        // ...

        this.toolTip1.SetToolTip(this.label1, "abc");

        // ...
    }
}

ツールチップとコンテナのものだけをコンポーネントに抽出できると確信しています。

于 2009-11-03T16:40:16.760 に答える
0

MSDN を読んでください。

別の解決策を試すことができます:


private System.Windows.Forms.ToolTip toolTip1;

private void YourControl_MouseHover(object sender, EventArgs e)
{
     toolTip1 = new System.Windows.Forms.ToolTip();
     this.toolTip1.SetToolTip(this.YourControl, "Your text here :) ");
     this.toolTip1.ShowAlways = true;
}

私が助けてくれることを願っています

于 2011-05-18T19:48:26.037 に答える