How can I get celltips or tooltips to vary from cell to cell in my DataGrid

Platform: WinForms| Category: Datagrid

One way to do this is to use a ToolTip control and reset the control text as the mouse moves from cell to cell. Below is a derived DataGrid class that implements this idea. The main points are:

Have members that track the current hitRow and hitCol where the mouse is.

  • In a MouseMove handler, do a HitTest on the mouse location to see if there is a new hit cell. If so, set the hitRow & hitCol, and hook the tooltip to hold your text according to the cell. In our sample, we just display the string value of the grid cell.
  • Finally, in the MouseMove handler, after setting a new text in the tooltip, set the tooltip active so it can show itself in due time.

public class DataGridCellTips : DataGrid
{
    private int hitRow;
    private int hitCol;
    private System.Windows.Forms.ToolTip toolTip1;

    public DataGridCellTips()
    {
        hitRow = -1;
        hitCol = -1;
        this.toolTip1 = new System.Windows.Forms.ToolTip();
        this.toolTip1.InitialDelay = 1000;
        this.MouseMove += new MouseEventHandler(HandleMouseMove);
    }

    private void HandleMouseMove(object sender, MouseEventArgs e)
    {
        DataGrid.HitTestInfo hti = this.HitTest(new Point(e.X, e.Y));
        if (hti.Type == DataGrid.HitTestType.Cell
            && (hti.Row != hitRow || hti.Column != hitCol))
        {     //new hit row 
            hitRow = hti.Row;
            hitCol = hti.Column;
            if (this.toolTip1 != null && this.toolTip1.Active)
                this.toolTip1.Active = false; //turn it off 
            this.toolTip1.SetToolTip(this, this[hitRow, hitCol].ToString());
            this.toolTip1.Active = true; //make it active so it can show itself 
            //Console.WriteLine('MouseMove '+ hitRow.ToString() + ' ' + hitCol.ToString()); 
        }
    }
}

Share with

Related FAQs

Couldn't find the FAQs you're looking for?

Please submit your question and answer.