0

ワープロを作っています。ワード プロセッサには、ユーザーがリッチテキスト ボックスでテキストを検索できる機能があります。

現在、私の「検索」コードは次のもので構成されています。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Basic_Word_Processor
{
    public partial class Find : Form
    {
        public Find()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int index = 0;
            string temp = Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text;
            Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text = "";
            Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text = temp;
            while (index < Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text.LastIndexOf(textBox1.Text))
            {
                Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Find(textBox1.Text, index, Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.TextLength, RichTextBoxFinds.None);
                Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.SelectionBackColor = Color.Yellow;
                index = Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text.IndexOf(textBox1.Text, index) +1;
            {
        }
    }
}

        private void Find_FormClosing(object sender, FormClosingEventArgs e)
        {
            Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.SelectionBackColor = Color.White;
        }
    }
}

ただし、richTextBox に「TEST」という単語が含まれていて、ユーザーが「test」を検索した場合、結果は見つかりません。

MSDN フォーラムで同じ質問をしたところ、textBox と richTextBox を ToLower に変換するように言われました。これは機能しましたが、richTextBox のテキストが小文字になってしまいました。richTextBox の実際のテキストを変更したくありません。

助言がありますか?

編集

textBox は Find フォームにあり、richTextBox は Basic_Word_Processor フォームにあります。

4

3 に答える 3

1

C# は既定で大文字と小文字が区別されると思いますが、LastIndexOf (およびおそらく IndexOf) のオーバーロードがあり、StringComparison.InvariantCultureIgnoreCase (または類似のもの) などのパラメーターを指定することで、大文字と小文字を区別しない検索が可能になります。http://msdn.microsoft.com/en-us/library/ms224422.aspxを参照してください。

編集:

明確にするために、コードを次のように変更することを提案しています。

string findText = textBox1.Text;
string currentText = Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text;
int index = currentText.IndexOf(findText, StringComparison.InvariantCultureIgnoreCase);
while (index >= 0)
{
    Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Find(findText, index, currentText.Length, RichTextBoxFinds.None);
    Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.SelectionBackColor = Color.Yellow;
    index = currentText.IndexOf(findText, index+1, StringComparison.InvariantCultureIgnoreCase);
}

ただし、考えてみると、次のようなより簡単なことができるはずです。

int index = Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Find(findText, RichTextBoxFinds.None);
while (index >= 0)
{
    Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.SelectionBackColor = Color.Yellow;
    index = Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Find(findText, index+1, RichTextBoxFinds.None);
}
于 2013-04-10T02:22:06.397 に答える
1

正規表現を使用できます

 private void button1_Click(object sender, EventArgs e)
        {
            Regex reg = new Regex("text",RegexOptions.IgnoreCase);
            foreach (Match find in reg.Matches(richTextBox1.Text))
            {
                richTextBox1.Select(find.Index, find.Length);
                richTextBox1.SelectionColor = Color.Red;
            }
        }

結果:

ここに画像の説明を入力

于 2013-04-10T02:55:06.587 に答える
0

値を返すだけなので、呼び出しtext1.Text.ToLower()によってリッチ テキスト ボックスのテキストが小文字になることはありません。

文字列に保持できます:

string text = text1.Text.ToLower();

次に、文字列テキストを使用して検索を処理します。

さらに、メソッドについてはよくわかりませんFindが、ケースを無視するオプションが必要です。そうでない場合は、比較対象のテキストも必ず小文字に変換してください。

編集:

どちらが richTextBox であるtext1かを間違えている可能性があります。Basic_Word_Processor.Instance.richTextBoxPrintCtrl1

ケースが Basic_Word_processor のものである場合、MSDN リンクでコメントに次のように入力します。

    string temp = Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text.ToLower();
    Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text = "";
    Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text = temp;

それは基本的に言った:

  • RichTextBox 内のテキストを小文字に変換します。常温にしておく
  • RichTextBox テキストを空に設定する
  • RichTextBox テキストを temp に置き換えます

もちろん、RichTextBox は小文字になります。

EDIT2:

ユーザーが特定のキーワードで見つかったすべてのテキストを強調表示したいようですが、機能していません。私はそれに答えようとします。

まず、リッチ テキスト ボックスで Find() メソッドを使用する代わりに、 SelectionStartandを使用しSelectionLengthます。大文字と小文字を区別しない比較を行う Find() メソッドが表示されません。

例:

string richText = Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text.ToLower();
string keyText = textBox1.Text.ToLower();

while 構文では、オーバーロード文字列 LastIndexOf を使用して、大文字と小文字を区別せずに比較します。金持ちはすでにより低い状態にあるので、これは今問題ではないかもしれません.

while (index < richText.LastIndexOf(textBox1.Text, StringComparison.InvariantCultureIgnoreCase))

次に、テキストを検索するには、次を使用します。

index = richText.IndexOf(keyText, index);

次に、次のように色を設定します。

Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.SelectionStart = index;
Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.SelectionLength = keyText.Length;
Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.SelectionBackColor = Color.Yellow;
于 2013-04-10T02:19:35.413 に答える