JP Hellemonsのおかげで、私のブラウザはロードされたページのファビコンをロードできるようになりました。
このようにして、Windows フォームのアイコンをサイトのファビコンに変更できます。
ユーザーがタブを切り替えたときにフォームアイコンを変更したいと思います。フォームアイコンは常に表示されているサイトと同じです。
ちょっとしたコードを作成し、それをSelectedIndexChanged-eventに入れました。
ただし、新しいタブを開くと、コードはタブを切り替え、タブ内にブラウザー要素を作成してから、ホームページに移動します。
favicon-method が新しいブラウザーをまだ見つけられないため、コードを使用するとエラーが発生します:s
ここに私のコードがあります:
a)ファビコンを取得する
b)フォームアイコンを変更する(このコードをSelectedIndexChanged-eventメソッドに配置しました)
private void tabs_SelectedIndexChanged(object sender, EventArgs e) { // tabs is the TabControl
this.Icon = favicon(GetActiveBrowser().Url);
}
// this code returns the active WebBrowser-element
private WebBrowser GetActiveBrowser() {
return (WebBrowser)tabs.SelectedTab.Controls[0];
}
c) btnNewTab を押したときに新しいタブを作成するコード
private void btnNewTab_Click(object sender, EventArgs e) {
// new tab
TabPage page = new TabPage("... Loading ...");
tabs.TabPages.Add(page);
this.Icon = Properties.Resources.loading1;
tabs.SelectedTab = page;
// include browser
WebBrowser browser = new WebBrowser();
browser.Parent = page;
browser.Dock = DockStyle.Fill;
browser.Visible = true;
browser.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.browser_DocumentCompleted);
browser.StatusTextChanged += new EventHandler(browser_StatusTextChanged);
browser.DocumentTitleChanged += new EventHandler(browser_DocumentTitleChanged);
browser.ProgressChanged += new WebBrowserProgressChangedEventHandler(browser_ProgressChanged);
browser.ContextMenuStrip = contextBrowser;
navigate(Properties.Settings.Default.BrowserHome);
} // open URL in new tab
質問は簡単ですが、答えはもっと難しいようです:
ファビコンを探す前に、WebBrowser 要素が作成されるまでフォームを待機させるにはどうすればよいですか?