Skip to main content

Create a Custom Tooltip dialog from a Form C# Windows Form Application



 
To show information on any button we can use a form and custom format it to show use it as a tooltip. For example to explain any functionality related to some section we have a long tooltip message. Here we can create a custom tooltip dialog that can show the message in more user friendly way.
 
To create a custom formatted dialog create a form with following settings -
 
 
namespace Project1
{
    public partial class frmCustomToolTipDlg : Form
    {
 
        public frmCustomToolTipDlg()
        {            
            InitializeComponent();
            this.FormBorderStyle = FormBorderStyle.None;            
            this.BackColor = Color.FromArgb(50, 50, 50);
            this.Opacity = 0;
            fadeTimer = new Timer { Interval = 15, Enabled = true };
            fadeTimer.Tick += new EventHandler(fadeTimer_Tick);            
        }
        void fadeTimer_Tick(object sender, EventArgs e)
        {
            if (this.IsDisposed)
                return;
 
            this.Opacity += 0.04;
            if (this.Opacity >= 0.99)
            {
                fadeTimer.Enabled = false;
            }
        }
        Timer fadeTimer;
 
    }
}
 
From desginer, set the frmCustomToolTipDlg FormBorderStyle to none and add a label with autosize property to false & dock style to fill. From designer.cs set label1 to public System.Windows.Forms.Label label1;
 
Also set the forecolor and backcolor property of label1 to display tooltip text as per the desiging requirement.
 
 
Now create mouse hover and mouse leave events of the control in the main form on which tooltip should be displayed -
 
    //custom dialog which works as tooltip for info buttons
    frmCustomToolTipDlg tooltip = new Forms.frmCustomToolTipDlg();
 
    private void btnTest1_MouseHover(object sender, EventArgs e)
        {
             tooltip = new frmCustomDlg();
 
            //adjust height according to length of message
            tooltip.Height = tooltip.Height + 30;
 
            tooltip.label1.Text = "This a message in customized tooltip dialog.";
 
            //get the location of control with respect to screen position    
            tooltip.Location = button1.PointToScreen(new Point(button1.Left, button1.Bottom));
            tooltip.Show();            
        }
 
        private void btnTest1_MouseLeave(object sender, EventArgs e)
        {
            tooltip.Close();
        }

        

Related post from this blog:
1.  Display Tooltip for Combo Box item C#.NET Winforms
2. Add Combo box in a cell of DataGridView at Run Time - C#.NET Windows Form
3. Continue executing code after calling ShowDialog() using C#



Comments

Popular posts from this blog

Show Image on canvas HTML5

Here is the sample code to select image from system and display it on html5 canvas and javascript: <input type= "file" id= "selectedImage" /> <canvas id= "myCanvas" width= "500" height= "500" > </canvas> Javascript code: $( "#selectedImage" ).change( function (e) { var URL = window .URL; var url = URL.createObjectURL(e.target.files[ 0 ]); img.src = url; img.onload = function () { var canvas = document .getElementById( "myCanvas" ); var ctx = canvas.getContext( "2d" ); var imgSize = calculateAspectRatioFit(img.width, img.height, canvas.clientWidth, canvas.clientHeight); ctx.clearRect( 0 , 0 , canvas.width, canvas.height); ctx.drawImage(img, 0 , 0 , imgSize.width, imgSize.height); } }); function calculateAspectRatioFit(srcWidth, srcHeight, maxWidth, maxHeight) { var ratio = Math .min(maxWi

Pass byte array from C# to C++ and vice-versa

Pass byte array from C# to C++                           If you want to pass a byte array to native DLL as parameter, you can use the Intptr to do this, please check the demo below. /C++ API code: TestDLL_API void TestArrayPara (BYTE * pArray, int nSize) { for ( int i= 0 ; i<nSize; i++) printf( "%d\n" , pArray[i]); } //C# code: class TestClass { [DllImport(@"TestDll.dll")] public static extern void TestArrayPara (IntPtr pArray, int nSize); public static void Test () { byte [] array = new byte [ 16 ]; for ( int i = 0 ; i < 16 ; i++) { array[i] = ( byte )(i + 97 ); } int size = Marshal.SizeOf(array[ 0 ]) * array.Length; IntPtr pnt = Marshal.AllocHGlobal(size); try { // Copy the array to unmanaged memory. Marshal.Copy(array, 0 , pnt, array

Display Tooltip for Combo Box item C#.NET Winforms

In windows form combo box control sometimes while adidng items dynamically we have items whose width is greater than width of combox box control. In this case for making UI more user friendly we can show tooltip over such item. Here is the sample C# code to display such tooltip:  Add a Tooltip control on the form.  Add following code : this . combo_box1 . DropDownStyle = System . Windows . Forms . ComboBoxStyle . DropDownList; this . combo_box1 . DrawMode = DrawMode . OwnerDrawFixed; this . combo_box1 . DrawItem += new DrawItemEventHandler(combo_box1_DrawItem); this . combo_box1 . DropDownClosed += new EventHandler(combo_box1_DropDownClosed); this . combo_box1 . MouseLeave += new EventHandler(combo_box1_Leave); void combo_box1_DrawItem( object sender, DrawItemEventArgs e) { if (e . Index < 0 ) { return ; } string text = combo_box1 . GetItemText(combo_box1 . Items[e . Index