Key Search

RichTextBox を KeyWord で検索します。

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

プログラムの説明

  1. 2019/07/18 Windows10 & Visual Studio 2005 の環境で開発します。
    画面全体に貼り付けられている RichTextBox のテキスト文を KeyWord で検索します。
    Windows10 では、検索キーは TextBox からタイプ入力するのが一般的です。
    キーワードを入力する DialogBox を使えば良いのでしょうが、ソースコードが長くて面倒です。
    そこで検索キーを入力する TextBox と検索を実行するボタンを RichTextBox と同一画面に貼り付ける方法を考えました。
  2. Window の画面全体に RichTextBox を貼り付けます。
    RichTextBox の表示の邪魔にならないように Button と TextBox を貼り付けます。
    Button には button_Click のイベントを設定します。
    テキストデータを入力するので using System.Text; を追加して下さい。
    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 の TextData は、改行コード(\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 上でマウスを左クリックすると mouse_Click が呼ばれます。
            // 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 を表示します。
    richTextBox1 の表示が消えて button1 と textBox1 が現れます。
        // richTextBox でマウスがクリックされたとき
        private void mouse_Click(object sender, MouseEventArgs e)
        {
            // MessageBox.Show("マウスがクリックされた");
            richTextBox1.Hide();
            button1.Show();
            textBox1.Show();
        }
    
  6. TextBox から検索キーワード("Text" を設定済)をタイプしてボタンをクリックすると 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();
        }
    
  1. 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);
    
  2. キャレット(マウスカーソル)位置から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;
        }
    
  3. 検索キーワードとして使うときは、キャレットの位置からワードの区切りを調べて切り取って下さい。
    検索キーワードが取得出来れば、後は先のプログラムと同様です。
    このプログラムは CSC でコンパイルすることが出来ます。
    /*★ Key Search    前田 稔 ★*/
    //   CSC CSForm.cs
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    using System.IO;    // for File, StreamReader
    using System.Text;  // for Encoding
    
    public class MyForm : Form
    {
        private Button button1;
        private TextBox textBox1;
        private RichTextBox richTextBox1;
    
        public MyForm()
        {
            InitializeComponent();
            button1.Hide();
            textBox1.Hide();
            string file_name = @"C:\DATA\C#\02Windows\06Tool\03RichTextBox\17Search\CSForm.cs";
            StreamReader reader = new StreamReader(file_name);
            string str;
            str = reader.ReadToEnd();
            richTextBox1.Text = str;
            reader.Close();
        }
    
        private void InitializeComponent()
        {
            this.richTextBox1 = new System.Windows.Forms.RichTextBox();
            this.button1 = new System.Windows.Forms.Button();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            // 
            // 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.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.richTextBox1_DoubleClick);
            this.richTextBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.mouse_Click);
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(46, 73);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 1;
            this.button1.Text = "Search";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button_Click);
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(158, 73);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(189, 25);
            this.textBox1.TabIndex = 2;
            this.textBox1.Text = "Text";
            // 
            // MyForm
            // 
            this.ClientSize = new System.Drawing.Size(575, 433);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.richTextBox1);
            this.Name = "MyForm";
            this.ResumeLayout(false);
            this.PerformLayout();
    
        }
        // richTextBox でマウスがクリックされたとき
        private void mouse_Click(object sender, MouseEventArgs e)
        {
            MessageBox.Show("マウスがクリックされた");
            richTextBox1.Hide();
            button1.Show();
            textBox1.Show();
        }
        // ボタンクリックでキーサーチ
        private void button_Click(object sender, EventArgs e)
        {
            string  s_key;
            s_key = textBox1.Text;
    Console.WriteLine("KEY:" + s_key + "\n");
            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();
        }
    
        // Title Bar に pos から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;
        }
    }
    
    class form01
    {
        public static void Main()
        {
            MyForm mf = new MyForm();
            Application.Run(mf);
        }
    }
    
  4. ダブルクリックが、うまく動作しないときは ListView Item 選択 を参考にして下さい。

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