8

これは信じられないほど愚かなことに出くわすかもしれませんが、私は次のことを理解できません:

  • 私はばかです
  • 私は何かを誤解しました
  • MSWebブラウザコントロールにバグがあります

後者だと思いたいです。

WinFormsユーザーコントロールにWebブラウザコントロールがあります。これは設計時にコントロールに追加されており、理論的には、コントロールのLoadイベントでGoogleに移動する必要があります。

簡単そうです。

でも。

public partial class TVHost : UserControl
{
    public TVHost()
    {
        InitializeComponent();
    }

    private void TVHost_Load(object sender, EventArgs e)
    {     
        webBrowser1.Navigate("http://google.co.uk");  
    }
}

これは機能しません。エラーはありません。何もありません。ブレークポイント/デバッグ行を挿入すると、Loadイベントが呼び出されないことがわかります。

この時点で、LoadイベントがDesigner.csファイルで正しく設定されていることを確認することにしました。

 this.Load += new System.EventHandler(this.TVHost_Load);

スジは通ってるようだ。

フォームからWebブラウザーのコントロールを削除すると、loadイベントが発生します。

私はこれを少し理解していませんが、コントロールはそれを使用するメソッドが最初に起動するのをどのように防ぐことができますか?

先に進むと、私はこれを見つけました: http ://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/d6e427b2-9cc9-4318-bb05-11363025e3f7/

リンクのTL;DRは次のとおりです。「Visible=trueに設定されているフォームにWebブラウザーがある場合、ロードは機能しません。」

確かに、Webブラウザーのデフォルトの可視性をfalseに変更すると、コントロールのloadイベントが発生します。loadイベントでブラウザの可視性を設定することで、問題を回避できます。

private void TVHost_Load(object sender, EventArgs e)
{
    webBrowser1.Visible = true;
    webBrowser1.Navigate("http://google.co.uk");
}

非常に奇妙な。

この「修正」は機能しますが、私はそれが信じられないほどハッキーであることに気付き、誰かがこの振る舞いについて何か説明があるかどうか疑問に思いましたか?

驚くべきことに、2005年から残っているMSConnectでこのバグを発見しました-http ://connect.microsoft.com/VisualStudio/feedback/details/116535/when-adding-a-webbrowser-control-to-a-user-control -the-load-will-not-fire#

4

1 に答える 1

3

リンクしたConnectバグの説明から:

今のところ、Loadイベントを発生させたい場合は、プロパティグリッドでWebBrowserコントロールのURLプロパティを設定できます。URLは、ページが読み込まれた状態で開始したくない場合は、about:blankでも、任意のURLにすることができます。

したがって、デザイナに移動してWebBrowser'sUrlプロパティを文字列about:blank(空のページをロードするように指示するWebBrowser)に設定すると、ユーザーコントロールはそのLoadイベントの取得を再開する必要があります。

于 2012-05-16T13:02:36.090 に答える