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