public ExtendedWebBrowser New(bool navigateHome) { // Create a new tab page TabPageEx page = new TabPageEx(); // Create a new browser control BrowserControl browserControl = new BrowserControl(); // Set the page as the Tag of the browser control, and vice-versa, this will come in handy later browserControl.Tag = page; page.Tag = browserControl; page.Text = Properties.Resources.DefaultBrowserTitle; browserControl.ShowAddressBar = showAddressBar; // Dock the browser control browserControl.Dock = DockStyle.Fill; // Add the browser control to the tab page page.Controls.Add(browserControl); if (navigateHome) { // Navigate to the home page browserControl.WebBrowser.GoHome(); } // Wire some events browserControl.WebBrowser.StatusTextChanged += new EventHandler(WebBrowser_StatusTextChanged); browserControl.WebBrowser.DocumentTitleChanged += new EventHandler(WebBrowser_DocumentTitleChanged); browserControl.WebBrowser.CanGoBackChanged += new EventHandler(WebBrowser_CanGoBackChanged); browserControl.WebBrowser.CanGoForwardChanged += new EventHandler(WebBrowser_CanGoForwardChanged); browserControl.WebBrowser.Navigated += new WebBrowserNavigatedEventHandler(WebBrowser_Navigated); browserControl.WebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted); browserControl.WebBrowser.Quit += new EventHandler(WebBrowser_Quit); // Add the new page to the tab control _tabControl.TabPages.Add(page); _tabControl.SelectedTab = page; _tabControl.Visible = true; return(browserControl.WebBrowser); }
void WebBrowser_StatusTextChanged(object sender, EventArgs e) { // First, see if the active page is calling, or another page ExtendedWebBrowser ewb = sender as ExtendedWebBrowser; // Return if we got nothing (shouldn't happen) if (ewb == null) { return; } // This is a little nasty. The Extended Web Browser is nested in // a panel, wich is nested in the browser control BrowserControl bc = BrowserControlFromBrowser(ewb); // The Tag of the BrowserControl should point to the TabPageEx TabPageEx page = bc.Tag as TabPageEx; // If not, return if (page == null) { return; } // See if 'page' is the active page if (this._tabControl.SelectedTab == page) { // Yep, send the event that updates the status bar text OnStatusTextChanged(new TextChangedEventArgs(ewb.StatusText)); } }
void WebBrowser_Quit(object sender, EventArgs e) { // This event is launched when window.close() is called from script ExtendedWebBrowser brw = sender as ExtendedWebBrowser; if (brw == null) { return; } // See which page it was on... BrowserControl bc = BrowserControlFromBrowser(brw); if (bc == null) { return; } TabPageEx page = bc.Tag as TabPageEx; if (page == null) { return; } // We got a page, remove & dispose it. _tabControl.TabPages.Remove(page); page.Dispose(); if (_tabControl.TabPages.Count == 0) { _tabControl.Visible = false; } }
void WebBrowser_DocumentTitleChanged(object sender, EventArgs e) { // Update the title of the tab page of the control. ExtendedWebBrowser ewb = sender as ExtendedWebBrowser; // Return if we got nothing (shouldn't happen) if (ewb == null) { return; } // This is a little nasty. The Extended Web Browser is nested in // a panel, wich is nested in the browser control BrowserControl bc = BrowserControlFromBrowser(ewb); // If we got null, return if (bc == null) { return; } // The Tag of the BrowserControl should point to the TabPageEx TabPageEx page = bc.Tag as TabPageEx; // If not, return if (page == null) { return; } // Update the tabPage // Keep it user-friendly, don't do those awful long web page titles // in tabs and make sure the title is never empty string documentTitle = ewb.DocumentTitle; if (string.IsNullOrEmpty(documentTitle)) { documentTitle = Properties.Resources.DefaultBrowserTitle; } else if (documentTitle.Length > 30) { documentTitle = documentTitle.Substring(0, 30) + "..."; } page.Text = documentTitle; // Set the full title as a tooltip page.ToolTipText = ewb.DocumentTitle; }
/// <summary> /// Closes the active tab /// </summary> public void Close() { // Find the active page TabPageEx page = (TabPageEx)this._tabControl.SelectedTab; // Check wheter there is actually a page selected if (page != null) { // Remove the page this._tabControl.TabPages.Remove(page); // Dispose the page (controls on the page are also disposed this way) page.Dispose(); } if (_tabControl.TabPages.Count == 0) { _tabControl.Visible = false; } }