2013-04-10 84 views
0

我正在做一個文字處理器。文字處理器有一個設施,允許用戶搜索richTextBox文本。如何讓我的richTextBox搜索不區分大小寫?

目前,我的「查找」代碼包括:

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」,用戶搜索「測試」,沒有結果會被發現。

我在MSDN論壇上提出了同樣的問題,但我被告知要轉換textBox和richTextBox ToLower,它工作,但它使richTextBox中的文本成爲小寫。我不希望它改變richTextBox中的實際文本。

有什麼建議嗎?

編輯

文本框是查找表上的RichTextBox的是Basic_Word_Processor形式。

+0

如果您的比較永遠是'低case'或者你需要它是不區分大小寫。即'TeSt'等於'tesT'? – 2013-04-10 02:28:04

+0

你想在當前的富文本框中找到文本嗎? – KF2 2013-04-10 02:43:55

回答

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); 
} 
+0

它的工作原理。謝謝。 – Toby 2013-04-10 02:55:38

+0

其實我注意到了另外一個問題。我想知道你能否幫忙。如果我要搜索的單詞是該行的第一個單詞,則不會突出顯示該單詞。所以說例如這條線是「測試1」,我搜索「測試」,什麼都不會突出顯示。這是爲什麼? – Toby 2013-04-10 03:05:34

+0

看起來我應該使用'> ='而不是'>'。我將編輯我的答案以反映這一點。 – erdomke 2013-04-10 03:21:41

0

調用text1.Text.ToLower()不會使您的富文本框中的文本爲小寫,因爲它只是返回值。然後使用字符串文本處理搜索

string text = text1.Text.ToLower();

你可以把它放在一個字符串。

此外,我不太確定Find方法,但它應該有一個忽略大小寫選項。如果不是,請確保將比較文本轉換爲小寫。

編輯:

我可能是弄錯了哪一個是RichTextBox的,text1Basic_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的文本OT空
  • 與臨時

當然,它會讓你的RichTextBox的小寫字母替換RichTextBox的文本。

EDIT2:

好好像用戶要突出強調特定關鍵字的所有找到的文本,它是行不通的。我會盡力回答。

首先, 而不是在富文本框中使用Find()方法,而是使用SelectionStartSelectionLength。我沒有看到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; 
+0

這是MSDN問題的鏈接。我試着跟着它,它使richTextBox中的文本變成小寫。 http://social.msdn.microsoft.com/Forums/en-US/visualstudiogeneral/thread/7f51c769-ff81-4154-8291-0fd0bf3fff87 – Toby 2013-04-10 02:22:39

+0

我已經更新了我的答案,但是,您是否嘗試過您的解決方案了? – Fendy 2013-04-10 02:28:06

+0

我做到了。它似乎沒有工作。 – Toby 2013-04-10 02:32:13

0

您可以使用Regex

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; 
      } 
     } 

結果:

enter image description here