前田稔(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 ↑] 検索機能