前田稔(Maeda Minoru)の超初心者のプログラム入門
string m_Kword; // キーワード int[] m_CurPos = new int[4]; // 記憶位置 ArrayList m_stack; // 行編集の領域 string sepa = "\n\\\t ,.;:<>(){}[]'\"+-*/=。、"; ・・・ InitializeComponent(); m_stack = new ArrayList(); ・・・ |
//★ RichTextBox KeyDown private void richTextBox1_KeyDown(object sender, KeyEventArgs e) { int wp; wp = richTextBox1.SelectionStart; if (e.Shift == true) { switch (e.KeyCode) { case Keys.F1: //カーソル位置にジャンプ SetCurPos(m_CurPos[0]); break; case Keys.F2: SetCurPos(m_CurPos[1]); break; case Keys.F3: SetCurPos(m_CurPos[2]); break; case Keys.F4: SetCurPos(m_CurPos[3]); break; case Keys.F5: //キー検索 Next_srh(m_Kword); break; case Keys.F6: Back_srh(m_Kword); break; case Keys.F8: //m_stack ペースト if (m_stack.Count <= 0) break; m_fclass.LineEdit(richTextBox1); richTextBox1.Select(m_fclass.st, 0); richTextBox1.SelectedText = (string)m_stack[m_stack.Count - 1]; m_flag = true; break; } return; } switch (e.KeyCode) { case Keys.F1: //F1~F4 カーソル位置を記憶 m_CurPos[0] = wp; break; case Keys.F2: m_CurPos[1] = wp; break; case Keys.F3: m_CurPos[2] = wp; break; case Keys.F4: m_CurPos[3] = wp; break; case Keys.F5: //Key Word WordSelect(wp, Color.DarkMagenta); m_Kword = richTextBox1.SelectedText; richTextBox1.Select(wp, 0); break; case Keys.F6: //Line Copy m_fclass.LineEdit(richTextBox1); m_stack.Add(m_fclass.lstr); break; case Keys.F7: //Line Cut m_fclass.LineEdit(richTextBox1); m_stack.Add(m_fclass.lstr); richTextBox1.Select(m_fclass.st, m_fclass.nx-m_fclass.st); richTextBox1.SelectedText = ""; m_flag = true; break; case Keys.F8: //Line Paste Popup if (m_stack.Count<=0) break; m_fclass.LineEdit(richTextBox1); richTextBox1.Select(m_fclass.st, 0); richTextBox1.SelectedText = (string)m_stack[m_stack.Count-1]; m_stack.RemoveAt(m_stack.Count-1); m_flag = true; break; case Keys.Enter: m_fclass.LineEdit(richTextBox1); if (m_fclass.cursor==m_fclass.st || m_fclass.line>=richTextBox1.Lines.Length-1) { return; } richTextBox1.SelectedText = "\n"; //現在位置にCRを挿入 richTextBox1.SelectedText = m_fclass.lstr.Substring(0, m_fclass.lt); m_flag = true; e.Handled = true; return; default: m_flag = true; break; } } |
private void SetCurPos(int cur) { int wk = richTextBox1.GetLineFromCharIndex(cur)-3; if (wk<0) wk = 0; wk = richTextBox1.GetFirstCharIndexFromLine(wk); richTextBox1.SelectionStart = wk; richTextBox1.Focus(); richTextBox1.ScrollToCaret(); WordSelect(cur, Color.DarkMagenta); richTextBox1.Select(cur, 0); } |
// Word を選択状態に設定 pos:Word選択位置 private int WordSelect(int pos, Color cor) { int sp, ep, wp; for(sp=pos; sp<richTextBox1.Text.Length; sp++) { if (richTextBox1.Text[sp]>' ' && richTextBox1.Text[sp]<='}') break; }; if (sp>=richTextBox1.Text.Length) { MessageBox.Show("WordSelect で終端に達しました"); return -1; } ep = sp; switch(richTextBox1.Text[ep]) { case '<': wp = richTextBox1.Text.Substring(ep).IndexOf('>'); ep += wp + 1; break; case '(': wp = richTextBox1.Text.Substring(ep).IndexOf(')'); ep += wp + 1; break; case '[': wp = richTextBox1.Text.Substring(ep).IndexOf(']'); ep += wp + 1; break; case '{': wp = richTextBox1.Text.Substring(ep).IndexOf('}'); ep += wp + 1; break; default: for (ep++; ep < richTextBox1.Text.Length; ep++) { for (wp = 0; wp < sepa.Length; wp++) { if (richTextBox1.Text[ep] == sepa[wp]) break; } if (wp < sepa.Length) break; } break; } if (ep>=richTextBox1.Text.Length) { ep = richTextBox1.Text.Length-1; MessageBox.Show("WordSelect で終端に達しました"); } richTextBox1.Focus(); if (ep>sp && (ep-sp<80)) { richTextBox1.Select(sp, ep - sp); richTextBox1.SelectionColor = cor; } return ep; } |
private void Next_srh(string word) { int wp; if (word == string.Empty) return; wp = richTextBox1.SelectionStart + word.Length; wp = richTextBox1.Find(word, wp, -1, RichTextBoxFinds.None); if (wp < 0) { MessageBox.Show("終端に達しました"); return; } richTextBox1.Select(wp+80, 0); richTextBox1.Select(wp, word.Length); richTextBox1.SelectionColor = Color.DarkMagenta; textbox.Select(wp, 0); //選択状態の解除 } private void Back_srh(string word) { int wp; if (word == string.Empty) return; wp = richTextBox1.SelectionStart; wp = richTextBox1.Find(word, 0, wp, RichTextBoxFinds.Reverse); if (wp < 0) { MessageBox.Show("終端に達しました"); return; } if (wp>80) richTextBox1.Select(wp-80, 0); richTextBox1.Select(wp, word.Length); richTextBox1.SelectionColor = Color.DarkMagenta; textbox.Select(wp, 0); //選択状態の解除 } |
[Next Chapter ↓] TabPage Chenge
[Previous Chapter ↑] 検索機能