3

私は C# の初心者で、問題があります。検索リクエストを実行した後、webBrowser コントロールでオカレンスを見つけるたびにメッセージ ボックスをポップアップする必要があります。この時点でオカレンスが選択されます。タイマーを使用して webBrowser を更新し、検索を再度開始しています。通知システムのようなものです。

using System;
using System.Windows.Forms;
using mshtml;

namespace websearch
{

public partial class Form1 : Form
{
    Timer temp = new Timer();
    //Timer refreshh = new Timer();
    public Form1()
    {        
        InitializeComponent();
        temp.Tick += new EventHandler(refreshh_Tick);
        temp.Interval = 1000 * 5;
        temp.Enabled = true;
        temp.Start();
        WebBrowser1.Navigate("http://stackoverflow.com/");
    }

    void refreshh_Tick(object sender, EventArgs e)
        {
            WebBrowser1.Refresh();
            WebBrowser1.DocumentCompleted += Carder_DocumentCompleted;
        }

    private void Carder_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            FindNext("C#", WebBrowser1);
            temp.Tick += refreshh_Tick;
        }
    public void FindNext(string text, WebBrowser webBrowser2)
        {

            IHTMLDocument2 doc = webBrowser2.Document.DomDocument as IHTMLDocument2;
            IHTMLSelectionObject sel = doc.selection;
            IHTMLTxtRange rng = sel.createRange() as IHTMLTxtRange;

            rng.collapse(false); // collapse the current selection so we start from the end of the previous range
            if (rng.findText(text))
              {
                rng.select();
                MessageBox.Show("Theire are new C# Question");              
              }

        }
    }

}
4

1 に答える 1

6

これを行うにはいくつかの方法があります。

  1. すべてのを解析しHtmlElementて内容を確認する再帰関数を作成します。必要なテキストが存在する場合は、要素を選択するか、要素のスタイルを変更するか、その他の必要な操作を行うことができます。

例えば:

public bool SearchEle(HtmlElement ele, string text)
{
    foreach (HtmlElement child in ele.Children)
    {
        if (SearchEle(child, text))
            return true;
    }
    if (!string.IsNullOrEmpty(ele.InnerText) && ele.InnerText.Contains(text))
    {
        ele.ScrollIntoView(true);
        return true;
    }

    return false;
}
  1. webBrowser2.Document.Body.InnerText文字列検索を使用して実行します。これは、実際にテキストを視覚的に強調表示するのではなく、テキストを検索したい場合です。

別の注意点として、refresh関数が呼び出されるたびにコードを移動するのではなく、コードWebBrowser1.DocumentCompleted += Carder_DocumentCompleted;をコンストラクターに移動することをお勧めします。Form1()refreshh_Tick

于 2013-03-20T16:31:04.823 に答える