protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (TinhTrangBaiLam == TinhTrang.DangLamBai)
            {
                e.Handled = true;
                int intViTriTu = ViTriTu("KhoangTrong", false);
                if (intViTriTu != -1)
                {
                    KhoangTrong ktKhoangTrong = (KhoangTrong)DanhSachTu[intViTriTu];
                    DanhSachTu.Remove(DanhSachTu[intViTriTu]);

                    int index       = SelectionStart - ktKhoangTrong.ViTri;
                    int removeIndex = ktKhoangTrong.NoiDung.IndexOf('.', index);
                    if (removeIndex >= 0)
                    {
                        ktKhoangTrong.NoiDung = ktKhoangTrong.NoiDung.Remove(removeIndex, 1);
                        ktKhoangTrong.NoiDung = ktKhoangTrong.NoiDung.Insert(index, e.KeyChar.ToString());
                        SelectionStart        = ktKhoangTrong.ViTri + removeIndex;
                        SelectionLength       = 1;
                        SelectedText          = "";
                        SelectionStart        = ktKhoangTrong.ViTri + index;
                        SelectionLength       = 0;
                        SelectedText          = e.KeyChar.ToString();
                    }
                    DanhSachTu.Insert(intViTriTu, ktKhoangTrong);
                }
                else
                {
                    intViTriTu = ViTriTu("TuInNghieng", true);
                    if (intViTriTu > -1)
                    {
                        TuInNghieng tinTu = (TuInNghieng)DanhSachTu[intViTriTu];
                        if (SelectionStart > tinTu.ViTri)
                        {
                            SelectionStart  = SelectionStart - 1;
                            SelectionLength = 1;
                            char chrKyTu = SelectedText[0];
                            chrKyTu       = QuanLyDau.ChuyenDoi(chrKyTu, e.KeyChar);
                            SelectedText  = chrKyTu.ToString();
                            tinTu.NoiDung = tinTu.NoiDung.Remove(SelectionStart - tinTu.ViTri - 1, 1);
                            tinTu.NoiDung = tinTu.NoiDung.Insert(SelectionStart - tinTu.ViTri - 1, chrKyTu.ToString());
                        }
                    }
                }
            }
        }
        //DanhSachSoQuiUoc: Danh sách số kí tự '.' được qui ước là vùng có thể đánh chữ.
        public void DocDe(string strFileNoiDung, string strFileDapAn, string strDanhSachSoQuiUoc)
        {
            strDanhSachSoQuiUoc = strDanhSachSoQuiUoc.Replace(" ", "");
            string[] DanhSachSoQuiUocs = strDanhSachSoQuiUoc.Split(',');
            //DanhSachTu.Clear();
            TinhTrangBaiLam = TinhTrang.DangLamBai;
            ReadOnly        = false;
            RichTextBox rtbTam = new RichTextBox();

            try
            {
                rtbTam.LoadFile(strFileNoiDung);
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message);
            }
            DanhSachTu.Clear();
            DapAn.Clear();
            DapAn = FileLuyenTapBUS.LayDapAn(strFileDapAn);
            bool blnFlag = false;

            rtbTam.SelectionLength = 1;
            for (int i = 0; i < rtbTam.Text.Length; ++i)
            {
                rtbTam.SelectionStart = i;
                if (rtbTam.SelectionFont.Italic)
                {
                    string strTuInNghieng = "";
                    do
                    {
                        strTuInNghieng += rtbTam.SelectedText;
                        rtbTam.SelectionStart++;
                        //++i;
                    } while (rtbTam.SelectionFont.Italic);
                    TuInNghieng tinTuIngNghieng = new TuInNghieng();
                    tinTuIngNghieng.ViTri   = i;
                    tinTuIngNghieng.NoiDung = strTuInNghieng;
                    DanhSachTu.Add(tinTuIngNghieng);
                    i += strTuInNghieng.Length;
                }
                else if (rtbTam.Text[i] == '.')
                {
                    int j = 1;
                    while (i + j < rtbTam.Text.Length && rtbTam.Text[i + j] == '.')
                    {
                        ++j;
                    }

                    if (LaMotTrongSo(j, DanhSachSoQuiUocs))
                    {
                        if (!blnFlag)
                        {
                            rtbTam.SelectionStart = i;
                            blnFlag = true;
                        }
                        KhoangTrong ktKhoangTrong = new KhoangTrong();

                        // Region Le Van Long
                        ktKhoangTrong.NoiDung = rtbTam.Text.Substring(i, j);
                        //for (int c = 0; c < j; ++c)
                        //{
                        //    ktKhoangTrong.NoiDung = ktKhoangTrong.NoiDung.Insert(0, ".");
                        //}
                        // Endregion

                        ktKhoangTrong.ViTri = i;
                        DanhSachTu.Add(ktKhoangTrong);
                    }

                    i = i + j;
                }
                else if (rtbTam.Text[i] == '(')
                {
                    int intVitriDongNgoac = rtbTam.Text.IndexOf(')', i);
                    if (intVitriDongNgoac > i)
                    {
                        if (!blnFlag)
                        {
                            rtbTam.SelectionStart = i + 1;
                            blnFlag = true;
                        }

                        NhomTu ntNhomTu = new NhomTu();
                        ntNhomTu.ViTri   = i + 1;
                        ntNhomTu.NoiDung = rtbTam.Text.Substring(i + 1, intVitriDongNgoac - i - 1);
                        DanhSachTu.Add(ntNhomTu);
                    }
                }
            }
            try
            {
                LoadFile(strFileNoiDung);
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message);
            }

            if (DanhSachTu.Count > 0)
            {
                SelectionStart = DanhSachTu[0].ViTri;
            }
        }
        protected override bool ProcessDialogKey(Keys keyData)
        {
            if (TinhTrangBaiLam == TinhTrang.DangLamBai)
            {
                if (keyData == (Keys.Control | Keys.V))
                {
                    return(true);
                }

                if (keyData == Keys.Tab)
                {
                    bool blnFlag = true;
                    for (int i = 0; i < DanhSachTu.Count; ++i)
                    {
                        if (DanhSachTu[i].ViTri > SelectionStart)
                        {
                            blnFlag        = false;
                            SelectionStart = DanhSachTu[i].ViTri + DanhSachTu[i].NoiDung.Length / 2;
                            break;
                        }
                    }
                    if (blnFlag && DanhSachTu.Count > 0)
                    {
                        SelectionStart = DanhSachTu[0].ViTri + DanhSachTu[0].NoiDung.Length / 2;
                    }
                }

                if (keyData == (Keys.Shift | Keys.Back) || keyData == (Keys.Control | Keys.Back))
                {
                    keyData = Keys.Back;
                    int intViTriTuLast = ViTriTu("KhoangTrong", true);
                    if (intViTriTuLast > -1)
                    {
                        SelectionStart  = DanhSachTu[intViTriTuLast].ViTri;
                        SelectionLength = DanhSachTu[intViTriTuLast].NoiDung.Length;
                    }
                }

                if (keyData == Keys.Back)
                {
                    int intViTriTuLast = ViTriTu("KhoangTrong", true);
                    if (intViTriTuLast > -1)
                    {
                        KhoangTrong ktKhoangTrong = (KhoangTrong)DanhSachTu[intViTriTuLast];
                        DanhSachTu.Remove(DanhSachTu[intViTriTuLast]);
                        int index = SelectionStart - ktKhoangTrong.ViTri;

                        if (index >= 0 && ((index != 0 || SelectionLength != 0) && SelectionLength <= ktKhoangTrong.NoiDung.Length - index))
                        {
                            string strRemove = "";
                            for (int i = 0; i < SelectionLength; ++i)
                            {
                                strRemove = strRemove.Insert(0, ".");
                            }

                            if (strRemove == "")
                            {
                                SelectionStart = SelectionStart - 1;
                                strRemove      = ".";
                            }

                            if (SelectionLength == 0)
                            {
                                index -= 1;
                            }
                            ktKhoangTrong.NoiDung = ktKhoangTrong.NoiDung.Remove(index, strRemove.Length);
                            ktKhoangTrong.NoiDung = ktKhoangTrong.NoiDung.Insert(index, strRemove);

                            SelectionLength = strRemove.Length;
                            SelectedText    = strRemove;
                            SelectionLength = 0;
                            SelectionStart  = index + ktKhoangTrong.ViTri;
                        }
                        DanhSachTu.Insert(intViTriTuLast, ktKhoangTrong);
                    }
                    return(true);
                }

                if (keyData == (Keys.Shift | Keys.Delete) || keyData == (Keys.Control | Keys.Delete))
                {
                    keyData = Keys.Delete;
                    int intViTriTuLast = ViTriTu("KhoangTrong", true);
                    if (intViTriTuLast > -1)
                    {
                        SelectionStart  = DanhSachTu[intViTriTuLast].ViTri;
                        SelectionLength = DanhSachTu[intViTriTuLast].NoiDung.Length;
                    }
                }

                if (keyData == Keys.Delete)
                {
                    int intViTriTu = ViTriTu("KhoangTrong", false);
                    if (intViTriTu > -1)
                    {
                        KhoangTrong ktKhoangTrong = (KhoangTrong)DanhSachTu[intViTriTu];
                        DanhSachTu.Remove(DanhSachTu[intViTriTu]);
                        int index = SelectionStart - ktKhoangTrong.ViTri;
                        if (index > -1 && SelectionLength <= ktKhoangTrong.NoiDung.Length - index)
                        {
                            string strRemove = "";
                            for (int i = 0; i < SelectionLength; ++i)
                            {
                                strRemove = strRemove.Insert(0, ".");
                            }

                            if (strRemove == "")
                            {
                                strRemove = ".";
                            }

                            ktKhoangTrong.NoiDung = ktKhoangTrong.NoiDung.Remove(index, strRemove.Length);
                            ktKhoangTrong.NoiDung = ktKhoangTrong.NoiDung.Insert(index, strRemove);

                            SelectionLength = strRemove.Length;
                            SelectedText    = strRemove;
                            SelectionLength = 0;
                            SelectionStart  = index + ktKhoangTrong.ViTri + strRemove.Length;
                        }
                        DanhSachTu.Insert(intViTriTu, ktKhoangTrong);
                    }
                    return(true);
                }

                if (keyData.ToString() == "Return")
                {
                    return(true);
                }
            }
            return(base.ProcessDialogKey(keyData));
        }