/// <summary>
        /// 在指定的列之前插入一列。
        /// </summary>
        internal void InsertLine(int row, int col)
        {
            // 防錯:如果不是有效的儲存格位置就直接返回。
            if (!CheckCellPosition(row, col))
            {
                return;
            }

            // 建立一列新的點字列,其中預設包含一個空方。
            BrailleLine brLine = new BrailleLine();

            brLine.Words.Add(BrailleWord.NewBlank());

            row = GetBrailleRowIndex(row);
            int lineIdx = GetBrailleLineIndex(row);

            m_BrDoc.Lines.Insert(lineIdx, brLine);
            OnDataChanged();

            // 更新 UI。
            GridInsertRowAt(row);
            RefreshRowNumbers();
            FillRow(brLine, row, true);

            // 將焦點移至新插入的那一列的第一個儲存格。
            GridFocusCell(new SourceGrid.Position(row, brGrid.FixedColumns), true);
        }
        /// <summary>
        /// 插入一個空方。
        /// </summary>
        /// <param name="grid"></param>
        /// <param name="row"></param>
        /// <param name="col"></param>
        /// <param name="count">插入幾個空方。</param>
        internal void InsertBlankCell(int row, int col, int count)
        {
            // 防錯:如果不是有效的儲存格位置就直接返回。
            if (!CheckCellPosition(row, col))
            {
                return;
            }

            int         wordIdx = GetBrailleWordIndex(row, col);
            int         lineIdx = GetBrailleLineIndex(row);
            BrailleLine brLine  = m_BrDoc.Lines[lineIdx];

            while (count > 0)
            {
                brLine.Words.Insert(wordIdx, BrailleWord.NewBlank());
                count--;
            }
            OnDataChanged();

            // Update UI.
            ReformatRow(row);
            SourceGrid.Position pos = new SourceGrid.Position(row, col + 1);
            brGrid.Selection.Focus(pos, true);    // 修正選取的儲存格範圍。
        }