0

WinFormsアプリケーションで.NETWebBrowserコントロールを使用して、非常に基本的な電子メールテンプレートエディターを実装しています。

このコードで編集モードに設定しました:

wbEmailText.Navigate( "about:blank" );
( (HTMLDocument)wbEmailText.Document.DomDocument ).designMode = "On";

したがって、ユーザーはWebBrowserのコンテンツを変更できます。ここで、ユーザーがコンテンツを変更したときを検出する必要があります。これは、コンテンツを検証する必要があるためです。DocumentCompleted、NavigateedなどのWebBrowserのイベントを使用しようとしましたが、どれも機能しませんでした。誰かアドバイスを頂けますか?前もって感謝します!

4

1 に答える 1

0

私はいくつかの実用的な、本当に世界的なコードを持っていましたが、そのプロジェクトは約 5 年前のもので、その後会社を辞めました。バックアップを探しましたが、見つからないので、記憶から作業して、いくつかの指針を提供しようとしています。

変更が行われたかどうかを確認するためにキャッチしてフックできるイベントはたくさんあります。イベントのリストは、http: //msdn.microsoft.com/en-us/library/ms535862 (v=vs.85).aspxで確認できます。

キー イベント (入力中) とクリック イベント (フォーカスの移動、ドラッグ/ドロップなど) をキャッチして処理しました。

いくつかのサンプル コードです。頭のてっぺんから実際のコードを思い出すことができなかったため、いくつかのビットは疑似コードであることに注意してください。

// Pseudo code
private string _content = string.empty;

private void frmMain_Load(object sender, EventArgs e)
{
    // This tells the browser that any javascript requests that call "window.external..." to use this form, useful if you want to hook up events so the browser can notify us of things via JavaScript
    webBrowser1.ObjectForScripting = this;
    webBrowser1.Url = new Uri("yourUrlHere");
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    // Store original content
    _content = webBrowser1.Content; // Pseudo code
    webBrowser1.Document.Click += new HtmlElementEventHandler(Document_Click);
    webBrowser1.Document.PreviewKeyDown +=new PreviewKeyDownEventHandler(Document_PreviewKeyDown);
}

protected void Document_Click(object sender, EventArgs e)
{
    DocumentChanged();
}

protected void Document_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    DocumentChanged();
}

private void DocumentChanged()
{
    // Compare old content with new content
    if (_content == webBrowser1.Content)    // Pseudo code
    {
        // No changes made...
        return;
    }

    // Add code to handle the change
    // ...

    // Store current content so can compare on next event etc
    _content = webBrowser1.Content; // Pseudo code
}
于 2013-03-14T09:59:58.803 に答える