Zwo
Zwo

Reputation: 1113

Show form as a ToolTip

I need to display a Form as a ToolTip of an UserControl. When the mouse is over the UserControl, the Form have to be show, and when the mouse leave that UserControl, the Form have to be hide.

I've overrided these events, in my UserControl class :

public partial class TreatedMetricsDisplay : UserControl
{
    private TreatedMetricsWindow _treatedMetricsWindow;
    public TreatedMetricsDisplay()
    {
        InitializeComponent();
        _treatedMetricsWindow = new TreatedMetricsWindow ();
    }

    protected override void OnMouseHover(EventArgs e)
    {
        base.OnMouseHover (e);
        this._treatedMetricsWindow.Show();
    }
    protected override void OnMouseLeave(EventArgs e)
    {
        base.OnMouseLeave (e);
        this._treatedMetricsWindow.Close ();
    }
}

No exceptions, but events are not called.

Upvotes: 1

Views: 127

Answers (2)

danish
danish

Reputation: 5610

Here is a code sample that might help:

private void ToolTipControl_Load(object sender, EventArgs e)
    {
        AttachHandlers(this);
    }

    private void AttachHandlers(Control currentControl)
    {
        foreach (Control control in currentControl.Controls)
        {
            control.MouseHover += GenericMouseHover;
            control.MouseLeave += GenericMouseLeave;

            if (control.Controls.Count != 0)
            {
                AttachHandlers(control);
            }
        }
    }

    void GenericMouseLeave(object sender, EventArgs e)
    {
        // no need to hide it if there was no form created in first place
        if(_form != null && _form.Visible)
        Form.Hide();
    }

    private void GenericMouseHover(object sender, EventArgs e)
    {
        Form.Location = this.PointToClient(Cursor.Position);
        Form.Show();
    }

    ToolTipForm _form;
    private ToolTipForm Form
    {
        get
        {
            if (_form == null)
            {
                _form = new ToolTipForm();
            }
            return _form;
        }
    }

Upvotes: 1

Sriram Sakthivel
Sriram Sakthivel

Reputation: 73472

Showing the Form will steal the Focus, It will get activated. So, it isn't a good idea to show Form as ToolTip. It will not behave as one would expect.

You need to use ToolStripDropDown combined with ToolStripControlHost. Which makes it possible to show any control as tooltip(not exactly).

public partial class MainForm : Form
{
    private ToolStripDropDown dropDown = new ToolStripDropDown();
    public MainForm()
    {
        InitializeComponent();

        dropDown.Items.Add(new ToolStripControlHost(new ToolTipUserControl() { Size = new Size(200, 200) }));
    }

    protected override void OnMouseEnter(EventArgs e)
    {
        base.OnMouseEnter(e);
        dropDown.Show(MousePosition);
    }

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

ToolTipUserControl could be any Control which you want to show as tooltip.

Upvotes: 3

Related Questions