public void MoveToCell(GLMouseEventArgs e)
        {
            GLDataGridView dgv = Parent as GLDataGridView;
            var            g   = GridRowCol(e.Location); // find row/col

            if (g != null)
            {
                if (g.Column < dgv.Rows[g.Row].CellCount)   // if within the range of cells of the current row
                {
                    var newcell = CellPara(g, e);           // get cell and set up mouse event args

                    if (newcell == currentcell)
                    {
                        currentcell.OnMouseCellMove(e);     // same cell, its a move
                    }
                    else
                    {
                        if (currentcell != null)            // different cell, its a leave on last
                        {
                            currentcell.OnMouseCellLeave(e);
                        }
                        currentcell = newcell;
                        currentcell?.OnMouseCellEnter(e);   // if we have a new cell, enter.
                    }

                    return;     // stop
                }
            }

            if (currentcell != null)                        // did not get a cell, but if we have a current cell, we need to leave
            {
                currentcell.OnMouseCellLeave(e);
                currentcell = null;
            }
        }