2011-03-04 77 views
1

我有一個WinForms窗體,其中包括一個WebBrowser控件。我使用瀏覽器來顯示用戶創建的文件的預覽。WebBrowser控件在Form_Load中沒有響應

當用戶加載文檔時,我希望它自動刷新預覽窗口以顯示新文檔。這工作100%。

但是,我剛剛添加了一個「加載最新文檔」功能,正如您應該能夠說明的那樣,在程序啓動時加載最後一個文檔。雖然它與任何其他加載文檔的方法(打開按鈕,文件 - >打開,文件 - > MRU等)經歷相同的代碼路徑,預覽不會在啓動時刷新。

我已經在調試器中執行了執行程序,並且所有代碼都正在執行。但是,看起來WebBrowser根本不起作用。事後,如果我點擊刷新按鈕(通過相同的代碼路徑),它可以正常工作。

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; 
    } 
} 

如果您將此代碼粘貼到名爲frmMain名爲html WebBrowser控件的形式,掛鉤的Form1_Load事件(自我提醒,重命名此),你應該能夠重現此樣品。也許添加一個也叫RefreshPreview()的按鈕。

所以,短版本:在Form_Load期間,WebBrowser不會做任何事情。之後,它工作正常。我需要它在Form_Load中做些什麼,我做錯了什麼?

回答

2

我建議將您的代碼移動到Form.Shown事件。問題可能是由於order and timing of Form events。由於Load在窗體顯示之前發生,因此WebBrowser的VisibleChanged事件從不發生,並且我認爲它是完全不活動的。

+0

這是從「???」到「* facepalm *」我還沒有。謝謝! (只要這件事情讓我接受) –