Tuesday, May 27, 2008

Create Custom ToolTip in C#

Firstly create a user control which you want to show as tool tip (eg. ToolTipWindow)
Create a class which will have all properties to be shown on your ToolTipWindow (eg. ToolTipData)

public partial class CustomToolTip: Component,IExtenderProvider
{
private Dictionary controlTable;

private SuperToolTipWindow window;
private SuperToolTipControlHost host;
private ToolTipWindow winData;

public FloatForm()
{
Init();
}
public FloatForm(IContainer container)
{
container.Add(this);
Init();
}

private void Init()
{
winData = new ToolTipWindow();
window = new SuperToolTipWindow();
host = new SuperToolTipControlHost(winData, "windowHost");
controlTable = new Dictionary();
host.Margin = window.Margin = host.Padding = window.Padding = new Padding(0);
window.Items.Add(host);
}

public void SetSuperStuff(Control control, ToolTipData info)
{
SetContolInfo(control, info);
}

private void SetContolInfo(Control control, ToolTipData info)
{
if (controlTable.ContainsKey(control))
{
if (info == null)
//hook events to our event handlers;
{
control.MouseEnter -= new EventHandler(this.MouseEntered);
control.MouseLeave -= new EventHandler(this.MouseLeft);
controlTable.Remove(control);
return;
}
controlTable[control] = info;
}
else
{
controlTable.Add(control, info);
//hook events to our event handlers;
control.MouseEnter += new EventHandler(this.MouseEntered);
control.MouseLeave += new EventHandler(this.MouseLeft);
}
}
private void MouseEntered(object sender, EventArgs e)
{ Show((Control)sender); }

private void MouseLeft(object sender, EventArgs e)
{
Close();
}

public void Close()
{
window.Close();
}

//Actually shows your tooltip
public void Show(Control owner)
{
winData.dgvDecisionTree.DataSource = controlTable[owner].DecisionTreeTable;
window.Show(owner, new Point(0, owner.Height), ToolStripDropDownDirection.AboveLeft);
}
#region IExtenderProvider Members

//This will decide for which types you want allow tooltip to be shown
bool IExtenderProvider.CanExtend(object extendee)
{
if (extendee is Control)
return true;
else
return false;
}

#endregion

}

//Inherited too show you tooltip
[ToolboxItem(false)]
class SuperToolTipWindow : ToolStripDropDown
{ }

//Inherited for making your control behave like tooltip
[ToolboxItem(false)]
class SuperToolTipControlHost : ToolStripControlHost
{
public SuperToolTipControlHost(Control c)
: base(c)
{

}
public SuperToolTipControlHost(Control c, string name)
: base(c, name)
{

}
}

This is all about your tooltip, now you are ready to show customised tool tip.
Drop this Control from ToolBox on your form
ToolTipData oInfo = new ToolTipData();
//Here assign all properties
ToolTip1.SetSuperStuff(button1, oInfo);

0 comments:

Disk Doctor Utility