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中に何かする必要がありますが、何が間違っていますか?
これは「???」からの速い処理でした私はまだ持っていた "* facepalm *"へ。ありがとうございました! (このことが私にできるようになるとすぐに受け入れます) –