Key Search

RichTextBox を KeyWord で検索します。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. 2019/07/18 Windows10 & Visual Studio 2005 の環境で開発します。
    画面全体に貼り付けられている RichTextBox のテキスト文を KeyWord で検索します。
    Windows10 では、検索キーは TextBox からタイプ入力するのが一般的です。
    DialogBox(Form2)を使えば良いのでしょうが、ソースコードが長く面倒です。
    そこで検索キーを入力するときだけ RichTextBox を隠す方法を考えました。
  2. Window の画面全体に RichTextBox を貼り付けます。
    RichTextBox に重なるように Button と TextBox を貼り付けて下さい。
    Button には button_Click のイベントを設定します。
    テキストデータを入力するので using を追加して下さい。
    MyForm には Button と TextBox と RichTextBox が定義されています。
    using System.IO;    // for File, StreamReader
    using System.Text;  // for Encoding
    
    public class MyForm : Form
    {
        private Button button1;
        private TextBox textBox1;
        private RichTextBox richTextBox1;
    
  3. MyForm.cs の Constructor です。
    起動時には button1 と textBox1 に Hide() を指定して非表示にします。
    @"C:\DATA\CSForm.cs" から utf-8 でタイプされたソースプログラムを入力して RichTextBox に表示します。
    事前に適当なソースプログラムファイルを格納しておいて下さい。
    RichTextBox では、改行コード(\n)を区切りとして sring[] 配列に格納されるようです。
        public MyForm()
        {
            InitializeComponent();
            button1.Hide();
            textBox1.Hide();
            string file_name = @"C:\DATA\CSForm.cs";
            StreamReader reader = new StreamReader(file_name);
            string str;
            str = reader.ReadToEnd();
            richTextBox1.Text = str;
            reader.Close();
        }
    
  4. 検索するときは RichTextBox 上でマウスをクリックします。
            // richTextBox1
            this.richTextBox1.Location = new System.Drawing.Point(12, 12);
            this.richTextBox1.Name = "richTextBox1";
            this.richTextBox1.Size = new System.Drawing.Size(551, 409);
            this.richTextBox1.TabIndex = 0;
            this.richTextBox1.Text = "";
            this.richTextBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.mouse_Click);
    
  5. mouse_Click() メソッドでは richTextBox1 を非表示にして、button1 と textBox1 を表示します。
        // richTextBox でマウスがクリックされたとき
        private void mouse_Click(object sender, MouseEventArgs e)
        {
            // MessageBox.Show("マウスがクリックされた");
            richTextBox1.Hide();
            button1.Show();
            textBox1.Show();
        }
    
  6. TextBox から検索キーワードをタイプしてボタンをクリックすると RichTextBox のテキストを検索します。
    richTextBox1.Find() で s_key を選択して、色を DarkMagenta に設定します。
    検索が終われば richTextBox1 を表示して button1 と textBox1 を非表示にします。
        // ボタンクリックでキーサーチ
        private void button_Click(object sender, EventArgs e)
        {
            string  s_key;
            s_key = textBox1.Text;
            for(int pos = 0; ; )
            {
                pos = richTextBox1.Find(s_key, pos, RichTextBoxFinds.None);
                if (pos < 0) break;
                richTextBox1.SelectionColor = Color.DarkMagenta;
                pos++;
            }
            richTextBox1.Select(0, 0);
            richTextBox1.Show();
            button1.Hide();
            textBox1.Hide();
        }
    
  7. RichTextBox 上でマウスのダブルクリックでキーワードを取得する方法も考えられます。
    ダブルクリックで richTextBox1_DoubleClick() メソッドを呼び出します。
    最初のクリックで mouse_Click が呼び出されるので、シングルクリックをコメントアウトして下さい。
        this.richTextBox1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.richTextBox1_DoubleClick);
        //this.richTextBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.mouse_Click);
    
    キャレット(マウスカーソル)位置から8文字を抽出してタイトルバーに表示してみましょう。
        private void richTextBox1_DoubleClick(object sender, MouseEventArgs e)
        {
            MessageBox.Show("RichTextBox DoubleClick");
            int pos = richTextBox1.SelectionStart;
            richTextBox1.Select(pos, 8);
            this.Text = richTextBox1.SelectedText;
        }
    

超初心者のプログラム入門(C# Frame Work)