5

我有一个自定义控件(C#,Visual Studio)。我想在鼠标悬停事件上显示一个工具提示。

但是,无论我做什么,它要么永远不会显示,要么有机会显示多次。

我认为这很简单:

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 回答