2011-03-04 2 views
1

Webブラウザーコントロールを含むWinFormsフォームがあります。私は、ユーザーが作成したファイルのプレビューを表示するためにブラウザを使用します。WebブラウザーコントロールがForm_Load中に応答しない

ユーザーがドキュメントを読み込むと、プレビューウィンドウが自動的に更新されて新しいドキュメントが表示されます。これは100%動作します。

しかし、わかりやすいように、プログラムの起動時に最後のドキュメントを読み込む「最新のドキュメントを読み込む」機能を追加しました。ドキュメントをロードする他の方法(Openボタン、File-> Open、File-> MRUなど)と同じコードパスを使用しますが、プレビューは起動時に更新されません。

私はデバッガでの実行に続き、すべてのコードが実行されています。しかし、Webブラウザは単に動作していないようです。後でリフレッシュボタンを押すと(同じコードパスを通ります)、うまく動作します。

public partial class frmMain : Form { 

    int scrolltop = 0, scrollleft = 0; 

    delegate void VoidDelegate(); 

    private void Form1_Load(object sender, EventArgs e) { 

     //irrelevant initialization code omitted 

     //this is normally 'about:blank', but it doesn't matter anyway 
     html.Navigate("http://google.com"); 

     NewFile(); 

     if (GlobalSettings.MRU.Files.Count > 0) { 
      LoadFile(GlobalSettings.MRU.Files[0]); 
     } 
    } 

    public void NewFile() { 

     //misc blanking omitted 

     html.DocumentText = ""; 
    } 

    private void LoadFile(string file) { 
     //file loading code omitted 

     //Trying to call RefreshPreview after everything else is done. 
     this.Invoke(new VoidDelegate(RefreshPreview)); 
     //RefreshPreview()); 
    } 

    public void RefreshPreview() { 
     //preserve the position if possible 
     if (html.Document.Body != null) { 
      scrolltop = html.Document.Body.ScrollTop; 
      scrollleft = html.Document.Body.ScrollLeft; 
     } 

     //string code = HtmlProcessing.ProcessCode(txtCode.Text, GetImageList()); 
     string code = "If you can see this, it worked."; 

     html.DocumentText = code; 
    } 
} 

あなたはhtmlという名前のWebBrowserコントロールとfrmMainという名前のフォームにこのコードを貼り付け、Form1_Loadイベント(この名前を変更し、自己への注意を;)フックアップした場合、あなたはこのサンプルを再現することができるはずです。おそらくRefreshPreview()を呼び出すボタンを追加してください。

短いバージョン:Form_Load中、WebBrowserは何もしません。その後、正常に動作します。 Form_Load中に何かする必要がありますが、何が間違っていますか?

答えて

2

コードをForm.Shownイベントに移動することをおすすめします。この問題はおそらくorder and timing of Form eventsに起因している可能性があります。 Loadはフォームの表示に先立って発生するため、WebBrowserのVisibleChangedイベントは発生しないため、完全に非アクティブです。

+0

これは「???」からの速い処理でした私はまだ持っていた "* facepalm *"へ。ありがとうございました! (このことが私にできるようになるとすぐに受け入れます) –

関連する問題