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