方法 : .NET Compact Framework で WebBrowser コントロールを使用する

更新 : 2007 年 11 月

.NET Compact Framework では、Widnows フォーム WebBrowser コントロールの主要な機能をサポートしています。Windows Mobile Version 5.0 Software for Pocket PC または Windows Mobile Version 5.0 Software for Smartphone を必要とするメンバは、次のとおりです。この一覧は、変更されることがあります。

次の考慮事項は、Windows Mobile 2003 for Pocket PC および Windows Mobile 2003 for Smartphone にだけ適用されます。

  • Refresh メソッドは、NotSupportedException 例外をスローします。

  • WebBrowser コントロールには、HTML フォームに埋め込まれたサブコントロールが含まれることがあるため、GotFocus イベントを監視しても、WebBrowser コントロールにフォーカスが設定されているかどうかを判断することはできません。この問題を回避するには、フォーカスを得る可能性のある他のコントロールを削除します。

  • Url プロパティは、WebBrowserNavigatingEventArgs では設定されず、空の文字列を返します。

Microsoft Windows CE 5.0 を実行する Pocket PC または Smartphone 以外のデバイスでは、新しい URL にアクセスすると、Navigated イベントおよび DocumentCompleted イベントの両方が 2 回発生します。このエラーは、Windows CE の将来のリリースで修正される予定です。

WebBrowser インスタンスを作成して HelpRequested イベントに応答することにより、アプリケーションのオンライン ヘルプ トピックを表示できます。

.NET Compact Framework では、Document プロパティ、およびこのプロパティに関連するプロパティとイベントをサポートしていません (DocumentText プロパティを除く)。DocumentText を使って、リンクや単純な HTML フォームを提供するなどの形態で HTML をユーザーに提示できますが、.NET Compact Framework では、このプロパティを使って Web ページの HTML コンテンツにアクセスする機能はサポートされていません。

フォームに対する応答は、Navigating イベントを処理するコード内で、WebBrowserDocumentCompletedEventArgs.Url プロパティを使用して決定できます。後述する 1 番目のプロシージャで、コード例を示します。

Smartphone アプリケーションでは、WebBrowser コントロールから移動できません。この問題を回避するには、キー イベントを検出し、別のコントロールにフォーカスを設定します。後述する 2 番目のプロシージャで、コード例を示します。

メモ :

この方法で問題を回避するには、Windows Mobile 5.0 または .NET Compact Framework 3.5 が必要です。

WebBrowser コントロールの使用の概要については、「方法 : Windows フォーム アプリケーションに Web ブラウザの機能を追加する」を参照してください。

埋め込まれた HTML コントロールから情報を収集するには

  1. WebBrowser コントロールに HTML を表示するには、DocumentText プロパティを使用します。この HTML には、URL を指定するためのリンクおよびテキスト ボックスのあるフォームが含まれています。

    Dim sb As New StringBuilder()
    sb.Append("<html><body>")
    sb.Append("<a href=")
    sb.Append("""")
    sb.Append("https://www.microsoft.com")
    sb.Append("""")
    sb.Append(">Microsoft</a><p>")
    sb.Append("Specify a URL:<br>")
    sb.Append("<form action=''><input type='text' name='address'/>")
    sb.Append("<br><input type='submit'>")
    sb.Append("</form></body></html>")
    webBrowser1.DocumentText = sb.ToString()
    
    StringBuilder sb = new StringBuilder();
    sb.Append("<html><body>");
    sb.Append("<a href=");
    sb.Append("\"");
    sb.Append("https://www.microsoft.com");
    sb.Append("\"");
    sb.Append(">Microsoft</a><p>");
    sb.Append("Specify a URL:<br>");
    sb.Append("<form action=''><input type='text' name='address'/>");
    sb.Append("<br><input type='submit'>");
    sb.Append("</form></body></html>");
    webBrowser1.DocumentText = sb.ToString();
    
  2. URL にフォームからの応答が含まれているかどうかを判断するには、Navigating イベントを使用します。含まれている場合は、URL に移動します。

    Private Sub webBrowser1_Navigating(ByVal sender As Object, ByVal e As WebBrowserNavigatingEventArgs)  Handles webBrowser1.Navigating
        Dim x As Integer
        '  The URL contains the results of the
        '  HTML form following the equals sign.
        x = e.Url.ToString().LastIndexOf("=")
        If x <> - 1 Then
            Dim Redirect As String
            Redirect = e.Url.ToString().Substring((x + 1))
            If Redirect <> "" Then
                ' Error handling code omitted in this example.
                ' Uri constructor throws a UriFormatException if there's
                ' an error.
                webBrowser1.Navigate(New Uri(Redirect))
            Else
                MessageBox.Show("Specify a URL")
            End If
        End If
    
    End Sub    
    
    private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
     {
         int x;
         //  The URL contains the results of the
         //  HTML form following the equals sign.
         x = e.Url.ToString().LastIndexOf("=");
         if (x != -1)
         {
             string Redirect;
             Redirect = e.Url.ToString().Substring(x + 1);
             if (Redirect != "")
             {
                 // Error handling code omitted in this example.
                 // Uri constructor throws a UriFormatException if there's
                 // an error.
                 webBrowser1.Navigate(new Uri(Redirect));
             }
             else
             {
                 MessageBox.Show("Specify a URL");
             }
         }
     }
    

    前に示した Visual Basic のコード例では、Navigating イベント ハンドラはコントロールに既に関連付けられています。C# では、このイベント ハンドラは次のように宣言します。

      this.webBrowser1.Navigating += new System.Windows.Forms.WebBrowserNavigatingEventHandler(this.webBrowser1_Navigating);
    

Smartphone の WebBrowser コントロールから移動するには

  • 移動キーで上方向が押されたときに、別のコントロールにフォーカスを設定する方法を次のコード例に示します。

    WebBrowser コントロールでは、Microsoft Pocket Internet Explorer のタブ移動ロジックを使用することで、このコントロールで表示される Web サイト上のさまざまなリンクや埋め込みコントロールを移動できます。KeyPreview プロパティを使用すると、この既定のタブ移動動作をオーバーライドできます。

    次のコード例では、フォームのコンストラクタ内、またはフォームの Load イベントを処理するコード内で、KeyPreview が true に設定されていることを前提としています。

    Protected Overrides Sub OnKeyDown(ByVal keyg As KeyEventArgs) 
        If keyg.KeyCode = Keys.Up Then
            textBox1.Focus()
        End If
        MyBase.OnKeyDown(keyg)
    
    protected override void OnKeyDown(KeyEventArgs keyg)
    {
        if (keyg.KeyCode == Keys.Up)
        {
            textBox1.Focus();
        }
        base.OnKeyDown(keyg);
    }
    

コードのコンパイル方法

この例では、次の名前空間への参照が必要です。

参照

処理手順

方法 : Windows フォーム アプリケーションに Web ブラウザの機能を追加する

概念

.NET Compact Framework に関する「方法」トピック