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; } }