private FormTile GetNextTile(Keys key, FormTile frmTile, bool skipNotEmpty = true)
        {
            FormTile nextTile = frmTile;

            Control parent = frmTile.Parent;

            if (key == Keys.Right)
            {
                nextTile = parent.Controls.Find($"t{nextTile.Ligne}_{nextTile.Col + 1}", false).FirstOrDefault() as FormTile;
            }
            else if (key == Keys.Left)
            {
                nextTile = parent.Controls.Find($"t{nextTile.Ligne}_{nextTile.Col - 1}", false).FirstOrDefault() as FormTile;
            }
            else if (key == Keys.Up)
            {
                nextTile = parent.Controls.Find($"t{nextTile.Ligne - 1}_{nextTile.Col}", false).FirstOrDefault() as FormTile;
            }
            else if (key == Keys.Down)
            {
                nextTile = parent.Controls.Find($"t{nextTile.Ligne + 1}_{nextTile.Col}", false).FirstOrDefault() as FormTile;
            }
            if (skipNotEmpty)
            {
                while (nextTile != null && !nextTile.IsEmpty && nextTile.Col < (Game.BoardSize - 1) && nextTile.Ligne < (Game.BoardSize - 1))
                {
                    nextTile = GetNextTile(key, nextTile);
                }
            }
            if (nextTile != null)
            {
                nextTile.Focus();
            }
            return(nextTile);
        }
        private void RefreshGridTiles(bool initBoard = true)
        {
            if (initBoard)
            {
                Game.InitBoard();
            }
            //CustomGroupBox.SuspendDrawing(gbBoard.Parent);
            bool     hasHeaderTile = gbBoard.Controls.Count > 0;
            FormTile frmTile       = null;

            for (int i = 0; i < Game.BoardSize; i++)
            {
                if (hasHeaderTile)
                {
                    frmTile = gbBoard.Controls.Find($"header_col{i}", false).First() as FormTile;
                }
                if (frmTile == null)
                {
                    gbBoard.Controls.Add(new FormTile(this, Game, new Tile(Game, 0, i), $"header_col{i}", HeaderTilesBackColor)
                    {
                        Text = $"{i + 1}"
                    });
                }
                else
                {
                    frmTile = new FormTile(this, Game, new Tile(Game, 0, i), $"header_col{i}", HeaderTilesBackColor)
                    {
                        Text = $"{i + 1}"
                    }
                };

                if (hasHeaderTile)
                {
                    frmTile = gbBoard.Controls.Find($"header_ligne{i}", false).First() as FormTile;
                }
                if (frmTile == null)
                {
                    gbBoard.Controls.Add(new FormTile(this, Game, new Tile(Game, i, 0), $"header_ligne{i}", HeaderTilesBackColor)
                    {
                        Text = $"{Game.Alphabet[i].Char}"
                    });
                }
                else
                {
                    frmTile = new FormTile(this, Game, new Tile(Game, i, 0), $"header_ligne{i}", HeaderTilesBackColor)
                    {
                        Text = $"{Game.Alphabet[i].Char}"
                    }
                };
            }

            foreach (var tile in Game.Grid)
            {
                frmTile      = new FormTile(this, Game, tile);
                frmTile.Text = tile.Letter?.Char.ToString();
                var existingTile = hasHeaderTile ? FindTile(tile) : null;
                if (existingTile == null)
                {
                    gbBoard.Controls.Add(frmTile);
                }
                else
                {
                    gbBoard.Controls.RemoveByKey(frmTile.Name);
                    gbBoard.Controls.Add(frmTile);
                }
            }
            //CustomGroupBox.ResumeDrawing(gbBoard.Parent);
        }