2010-11-19 8 views
0

find関数を使用するC#プログラムがありますが、その単語を見つけることはできますが、見つかった単語はrichTextBoxで強調表示されません。C#検索機能をプログラムする方法

誰かがコードについてアドバイスできますか?

ありがとうございました。

検索機能クラスフォーム:あなたは、あなたが最初に探しているものを選択する必要があり

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 Syscrawl 
{ 
public partial class Find_Form : Form 
{ 
    FTK_Menu_Browsing_History fmbh = new FTK_Menu_Browsing_History(); 

    public Find_Form() 
    { 
     InitializeComponent(); 
    } 

    public void searchButton_Click(object sender, EventArgs e) 
    { 
     string s1 = fmbh.getSearchBrowsing().ToLower(); 
     string s2 = textBoxSearch.Text.ToLower(); 

     if (s1.Contains(s2)) 
     { 
      MessageBox.Show("Word found!"); 

      this.fmbh.richTextBoxBrowsing.Find(s2); 
      this.fmbh.richTextBoxBrowsing.SelectionLength = s2.Length; 
      this.fmbh.richTextBoxBrowsing.SelectionColor = Color.Red; 
      this.Close(); 
     } 
     else 
     { 
      MessageBox.Show("Word not found!"); 
     } 
    } 
} 
} 
+0

少し混乱していますが、検索の結果に選択の開始点を設定したことはありますか? – phill

答えて

1

。これは:

int offset = s1.IndexOf(s2); 
richTextBox1.Select(offset, s2.Length); 

その後、全体をハイライト表示できます。もう一つのヒントは、選択プロセスでのちらつきを防ぐフォームでこのコードを使用します

protected override void WndProc(ref Message m) 
{ 
    if (m.Msg == 0) { 
     if (!_doPaint) 
      return; 
    } 

    base.WndProc(ref m); 
} 

選択falseにし、後は何も設定_doPaintを選択する前には、これをtrueに設定します。

希望すると助かります!

+0

動作しません): – athgap

0

一致の位置を見つけるには、s1.IndexOf(s2, StringComparison.CurrentCultureIgnoreCase)に電話する必要があります。

また、FindフォームがHistoryフォームの独自のインスタンスを作成するように見えます。既存のインスタンスは使用されません。
コンストラクタパラメータの受け入れを検討する必要があります。

関連する問題